From ffdb30fcaa6793f7519dde0194c7cfc5baf3d15d Mon Sep 17 00:00:00 2001 From: themacboy Date: Tue, 9 Aug 2022 05:14:35 +0200 Subject: [PATCH 01/73] bug _cornerExceedsMapLats, set positive values --- src/DistortableImageOverlay.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/DistortableImageOverlay.js b/src/DistortableImageOverlay.js index 37f57aa23..651d11554 100644 --- a/src/DistortableImageOverlay.js +++ b/src/DistortableImageOverlay.js @@ -214,11 +214,11 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var exceedsTop; var exceedsBottom; if (zoom === 0) { - exceedsTop = map.project(corner).y < 2; - exceedsBottom = map.project(corner).y >= 255; + exceedsTop = Math.abs( map.project(corner).y ) < 2; + exceedsBottom = Math.abs( map.project(corner).y ) >= 255; } else { - exceedsTop = map.project(corner).y / zoom < 2; - exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255; + exceedsTop = Math.abs( map.project(corner).y / zoom ) < 2; + exceedsBottom = Math.abs( map.project(corner).y / Math.pow(2, zoom) ) >= 255; } return (exceedsTop || exceedsBottom); }, From 57d100a7b2e81f75bdb1531560849607617903cb Mon Sep 17 00:00:00 2001 From: themacboy Date: Sat, 22 Oct 2022 02:55:55 +0200 Subject: [PATCH 02/73] inici OpacitiesAction --- package-lock.json | 14927 +--------------- src/edit/DistortableImage.Edit.js | 2 +- src/edit/actions/OpacitiesAction.js | 37 + .../toolbars/DistortableImage.PopupBar.js | 1 + 4 files changed, 59 insertions(+), 14908 deletions(-) create mode 100644 src/edit/actions/OpacitiesAction.js diff --git a/package-lock.json b/package-lock.json index 0112aaff0..99921267e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14885 +1,8 @@ { "name": "leaflet-distortableimage", "version": "0.21.9", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "leaflet-distortableimage", - "version": "0.21.9", - "license": "MIT", - "dependencies": { - "exif-js": "^2.3.0", - "glfx": "0.0.4", - "leaflet-google-places-autocomplete": "^0.0.9", - "leaflet-toolbar": "0.4.0-alpha.2", - "webgl-distort": "0.0.2" - }, - "devDependencies": { - "@babel/core": "^7.9.0", - "@babel/preset-env": "^7.9.5", - "acorn": "^8.7.1", - "babel-loader": "^8.1.0", - "chai": "^4.2.0", - "clean-webpack-plugin": "^4.0.0", - "cross-env": "^7.0.2", - "eslint": "^8.16.0", - "eslint-config-google": "^0.14.0", - "glob": "^8.0.3", - "grunt": "^1.1.0", - "grunt-cli": "^1.3.2", - "grunt-contrib-concat": "^2.1.0", - "grunt-contrib-watch": "^1.0.0", - "grunt-karma": "^4.0.0", - "grunt-svg-sprite": "^1.5.0", - "grunt-svgmin": "^6.0.0", - "grunt-webpack": "^5.0.0", - "gruntify-eslint": "^5.0.0", - "husky": "^8.0.1", - "karma": "^6.3.14", - "karma-babel-preprocessor": "^8.0.1", - "karma-chrome-launcher": "^3.1.0", - "karma-coverage": "^2.0.3", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", - "karma-sinon": "^1.0.5", - "leaflet": "1.x", - "matchdep": "^2.0.0", - "mocha": "^10.0.0", - "sinon": "^14.0.0", - "uglify-js": "^3.7.4", - "webpack": "^5.73.0", - "webpack-cli": "^4.9.2", - "webpack-dev-server": "^4.9.0", - "webpack-merge-and-include-globally": "^2.1.24" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "leaflet": "1.x" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", - "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", - "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.9", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz", - "integrity": "sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw==", - "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz", - "integrity": "sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-member-expression-to-functions": "^7.18.6", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", - "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz", - "integrity": "sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-wrap-function": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", - "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz", - "integrity": "sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", - "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz", - "integrity": "sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", - "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", - "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz", - "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz", - "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz", - "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", - "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz", - "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz", - "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.9.tgz", - "integrity": "sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.18.6", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.18.9", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.9", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.9", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.9", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.6", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.9", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", - "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz", - "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.9", - "@babel/types": "^7.18.9", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", - "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", - "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@sinonjs/samsam": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz", - "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.6.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" - } - }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", - "dev": true - }, - "node_modules/@socket.io/base64-arraybuffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", - "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/component-emitter": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", - "dev": true - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.2.tgz", - "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "13.11.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.1.tgz", - "integrity": "sha512-eWQGP3qtxwL8FGneRrC5DwrJLGN4/dH1clNTuLfN81HCrxVtxRjygDTUoZJ5ASlDEeo0ppYFQjQIlXhtXpOn6g==", - "dev": true - }, - "node_modules/@types/q": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", - "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "node_modules/array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dev": true, - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", - "dev": true - }, - "node_modules/babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/babel-loader/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/body": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", - "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", - "dev": true, - "dependencies": { - "continuable-cache": "^0.3.1", - "error": "^7.0.0", - "raw-body": "~1.1.0", - "safe-json-parse": "~1.0.1" - } - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/body-parser/node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/bonjour-service": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.12.tgz", - "integrity": "sha512-pMmguXYCu63Ug37DluMKEHdxc+aaIf/ay4YbF8Gxtba+9d3u+rmEWy61VK3Z3hp8Rskok3BunHYnG0dUHAsblw==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.4" - } - }, - "node_modules/bonjour-service/node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", - "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", - "dev": true - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001346", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001346.tgz", - "integrity": "sha512-q6ibZUO2t88QCIPayP/euuDREq+aMAxFE5S70PkrLh0iTDj/zEhgvJRKC2+CvXY6EWc6oQwUR48lL5vCW6jiXQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "node_modules/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/chokidar/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", - "dev": true, - "dependencies": { - "del": "^4.1.1" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "webpack": ">=4.0.0 <6.0.0" - } - }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "node_modules/cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "node_modules/cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "node_modules/cloneable-readable/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/cloneable-readable/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/color-string": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", - "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", - "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=", - "dev": true - }, - "node_modules/colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", - "dev": true, - "dependencies": { - "color": "3.0.x", - "text-hex": "1.0.x" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/continuable-cache": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", - "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.22.8", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.8.tgz", - "integrity": "sha512-pQnwg4xtuvc2Bs/5zYQPaEYYSuTxsF7LBWF0SvnVhthZo/Qe+rJpcEekrdNK5DWwDJ0gv0oI9NNX5Mppdy0ctg==", - "dev": true, - "dependencies": { - "browserslist": "^4.20.3", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "node_modules/css-select/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/css-selector-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", - "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==", - "dev": true - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-what": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", - "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/cssmin": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/cssmin/-/cssmin-0.4.3.tgz", - "integrity": "sha1-yRlAd+Dr2s1pHV9ZAVudgZ840BU=", - "dev": true, - "bin": { - "cssmin": "bin/cssmin" - } - }, - "node_modules/csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", - "dev": true, - "dependencies": { - "css-tree": "1.0.0-alpha.39" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.6", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", - "dev": true - }, - "node_modules/csso/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/date-format": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", - "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-for-each": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/deep-for-each/-/deep-for-each-3.0.0.tgz", - "integrity": "sha512-pPN+0f8jlnNP+z90qqOdxGghJU5XM6oBDhvAR+qdQzjCg5pk/7VPPvKK1GqoXEFkHza6ZS+Otzzvmr0g3VUaKw==", - "dev": true, - "dependencies": { - "lodash.isplainobject": "^4.0.6" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/default-gateway/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/default-gateway/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "node_modules/diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "dev": true, - "dependencies": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" - } - }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.3.1.tgz", - "integrity": "sha512-spBwIj0TK0Ey3666GwIdWVfUpLyubpU53BTCu8iPn4r4oXd9O14Hjg3EHw3ts2oed77/SeckunUYCyRlSngqHw==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", - "dev": true - }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", - "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", - "dev": true - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.144", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.144.tgz", - "integrity": "sha512-R3RV3rU1xWwFJlSClVWDvARaOk6VUO/FubHLodIASDB3Mc2dzuWvNdfOgH9bwHUTqT79u92qw60NWfwUdzAqdg==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "dev": true, - "dependencies": { - "env-variable": "0.0.x" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/engine.io": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", - "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", - "dev": true, - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", - "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", - "dev": true, - "dependencies": { - "@socket.io/base64-arraybuffer": "~1.0.2" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "node_modules/env-variable": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", - "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==", - "dev": true - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/error": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", - "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", - "dev": true, - "dependencies": { - "string-template": "~0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", - "dev": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "node_modules/es6-promisify": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", - "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz", - "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.1", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "@humanwhocodes/module-importer": "^1.0.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-google": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", - "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/eslint/node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/eslint/node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true - }, - "node_modules/eslint/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/glob-parent/node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", - "dev": true - }, - "node_modules/eventemitter3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/execa/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/exif-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/exif-js/-/exif-js-2.3.0.tgz", - "integrity": "sha1-nRCBm/Vx+HOBPnZAJBJVq5zhqBQ=" - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/express/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "node_modules/express/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/express/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extract-zip": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", - "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "dev": true, - "dependencies": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - } - }, - "node_modules/extract-zip/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/extract-zip/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/fast-glob/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/fast-glob/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/fecha": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==", - "dev": true - }, - "node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "dependencies": { - "glob": "~5.0.0" - }, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/findup-sync/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/flat-cache/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/flat-cache/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.14.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", - "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "dependencies": { - "globule": "^1.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getobject": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", - "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glfx": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/glfx/-/glfx-0.0.4.tgz", - "integrity": "sha1-G3dtx0jAgZlGJLCvO1Y4QD3nj00=" - }, - "node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "dev": true, - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globby/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globby/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globule": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz", - "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==", - "dev": true, - "dependencies": { - "glob": "~7.1.1", - "lodash": "~4.17.12", - "minimatch": "~3.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/globule/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/grunt": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", - "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", - "dev": true, - "dependencies": { - "dateformat": "~3.0.3", - "eventemitter2": "~0.4.13", - "exit": "~0.1.2", - "findup-sync": "~0.3.0", - "glob": "~7.1.6", - "grunt-cli": "~1.4.3", - "grunt-known-options": "~2.0.0", - "grunt-legacy-log": "~3.0.0", - "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", - "js-yaml": "~3.14.0", - "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" - }, - "bin": { - "grunt": "bin/grunt" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/grunt-cli": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", - "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", - "dev": true, - "dependencies": { - "grunt-known-options": "~2.0.0", - "interpret": "~1.1.0", - "liftup": "~3.0.1", - "nopt": "~4.0.1", - "v8flags": "~3.2.0" - }, - "bin": { - "grunt": "bin/grunt" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/grunt-cli/node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/grunt-contrib-concat": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-2.1.0.tgz", - "integrity": "sha512-Vnl95JIOxfhEN7bnYIlCgQz41kkbi7tsZ/9a4usZmxNxi1S2YAIOy8ysFmO8u4MN26Apal1O106BwARdaNxXQw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "source-map": "^0.5.3" - }, - "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "grunt": ">=1.4.1" - } - }, - "node_modules/grunt-contrib-concat/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/grunt-contrib-concat/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/grunt-contrib-concat/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/grunt-contrib-concat/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/grunt-contrib-concat/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/grunt-contrib-concat/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/grunt-contrib-watch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", - "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==", - "dev": true, - "dependencies": { - "async": "^2.6.0", - "gaze": "^1.1.0", - "lodash": "^4.17.10", - "tiny-lr": "^1.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-contrib-watch/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/grunt-karma": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/grunt-karma/-/grunt-karma-4.0.2.tgz", - "integrity": "sha512-4+iBBkXZjHHMDAG5kpHCdDUqlSEBJ6sqouLMRf0p+QB8wGMs300DtaCQphHqd7pM3gpXoGVT3yRRsT7KOZpJMA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.10" - }, - "peerDependencies": { - "grunt": ">=0.4.x", - "karma": "^4.0.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/grunt-known-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", - "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-legacy-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", - "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", - "dev": true, - "dependencies": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~2.1.0", - "hooker": "~0.2.3", - "lodash": "~4.17.19" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/grunt-legacy-log-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", - "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", - "dev": true, - "dependencies": { - "chalk": "~4.1.0", - "lodash": "~4.17.19" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/grunt-legacy-log-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/grunt-legacy-log-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/grunt-legacy-log-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/grunt-legacy-log-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/grunt-legacy-log-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/grunt-legacy-log-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/grunt-legacy-util": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", - "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", - "dev": true, - "dependencies": { - "async": "~3.2.0", - "exit": "~0.1.2", - "getobject": "~1.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.21", - "underscore.string": "~3.3.5", - "which": "~2.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/grunt-svg-sprite": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/grunt-svg-sprite/-/grunt-svg-sprite-1.5.0.tgz", - "integrity": "sha512-E7q84qIYLygO/CRlqH2t5EdsaLdblqNs2JSpY+d1XEyNIlOU0tsUuG/cro36Nd3IGSnouzIJAS4yurpPUHUrRA==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "prettysize": "^1.1.0", - "svg-sprite": "^1.5.0" - }, - "engines": { - "node": ">= 6.4" - }, - "peerDependencies": { - "grunt": ">=1.0.1" - } - }, - "node_modules/grunt-svgmin": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/grunt-svgmin/-/grunt-svgmin-6.0.1.tgz", - "integrity": "sha512-NmVF57+Un8oiq8ZVJQJEkomEeGMcq2Sd6OX/0k2tpUc5Y/+kXwgg6CDW9RA0Yr9jXOcfFE46CNKg0hBxp2SFiQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "log-symbols": "^2.2.0", - "pretty-bytes": "^5.1.0", - "svgo": "^1.2.0" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "grunt": ">=1" - } - }, - "node_modules/grunt-webpack": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/grunt-webpack/-/grunt-webpack-5.0.0.tgz", - "integrity": "sha512-C7emzVIGJhZ5V5ZYjylr9sDD9PE9Dh/55NaSzP2P2dhif+m/1gHbjDZQ7PDzguyuzwBz4Qc8voQHR06FSp4CKg==", - "dev": true, - "dependencies": { - "deep-for-each": "^3.0.0", - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/grunt/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/grunt/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/grunt/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/grunt/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/gruntify-eslint": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gruntify-eslint/-/gruntify-eslint-5.0.0.tgz", - "integrity": "sha512-pa2sXHK9+U4dCGdGSIMkpJARNwRStdLBsddNxmSHSSWROUdhWMrXvFWm6pj48zJhyV3Qy068VIuF1seYIvc0cw==", - "dev": true, - "dependencies": { - "eslint": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "grunt": ">=0.4.5" - } - }, - "node_modules/gruntify-eslint/node_modules/acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/gruntify-eslint/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/gruntify-eslint/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/gruntify-eslint/node_modules/eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^6.14.0 || ^8.10.0 || >=9.10.0" - } - }, - "node_modules/gruntify-eslint/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/gruntify-eslint/node_modules/eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/gruntify-eslint/node_modules/eslint/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/gruntify-eslint/node_modules/eslint/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/gruntify-eslint/node_modules/espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", - "dev": true, - "dependencies": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/gruntify-eslint/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/gruntify-eslint/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/gruntify-eslint/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/gruntify-eslint/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/gruntify-eslint/node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true, - "engines": { - "node": ">=6.5.0" - } - }, - "node_modules/gruntify-eslint/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gruntify-eslint/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gruntify-eslint/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/gruntify-eslint/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gruntify-eslint/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/gruntify-eslint/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hasha": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", - "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", - "dev": true, - "dependencies": { - "is-stream": "^1.0.1", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/http-parser-js": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", - "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-proxy-middleware/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http-proxy-middleware/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/http-proxy-middleware/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/husky": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", - "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "node_modules/invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "dependencies": { - "is-path-inside": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "dependencies": { - "path-is-inside": "^1.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "dependencies": { - "is-unc-path": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "dependencies": { - "unc-path-regex": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", - "dev": true - }, - "node_modules/karma": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.0.tgz", - "integrity": "sha512-s8m7z0IF5g/bS5ONT7wsOavhW4i4aFkzD4u4wgzAQWT4HGUeWI3i21cK2Yz6jndMAeHETp5XuNsRoyGJZXVd4w==", - "dev": true, - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-babel-preprocessor": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/karma-babel-preprocessor/-/karma-babel-preprocessor-8.0.2.tgz", - "integrity": "sha512-6ZUnHwaK2EyhgxbgeSJW6n6WZUYSEdekHIV/qDUnPgMkVzQBHEvd07d2mTL5AQjV8uTUgH6XslhaPrp+fHWH2A==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "@babel/core": "7" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", - "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", - "dev": true, - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-chrome-launcher/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", - "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-mocha": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz", - "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.3" - } - }, - "node_modules/karma-mocha-reporter": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz", - "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=", - "dev": true, - "dependencies": { - "chalk": "^2.1.0", - "log-symbols": "^2.1.0", - "strip-ansi": "^4.0.0" - }, - "peerDependencies": { - "karma": ">=0.13" - } - }, - "node_modules/karma-mocha-reporter/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/karma-mocha-reporter/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/karma-sinon": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz", - "integrity": "sha1-TjRD8oMP3s/2JNN0cWPxIX2qKpo=", - "dev": true, - "engines": { - "node": ">= 0.10.0" - }, - "peerDependencies": { - "karma": ">=0.10", - "sinon": "*" - } - }, - "node_modules/karma/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/karma/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/karma/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/karma/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/karma/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma/node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/karma/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/karma/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/karma/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/karma/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/karma/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/karma/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/karma/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/kew": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", - "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", - "dev": true - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/kuler": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "dev": true, - "dependencies": { - "colornames": "^1.1.1" - } - }, - "node_modules/lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "dependencies": { - "invert-kv": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/leaflet": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.8.0.tgz", - "integrity": "sha512-gwhMjFCQiYs3x/Sf+d49f10ERXaEFCPr+nVTryhAW8DWbMGqJqt9G4XuIaHmFW08zYvhgdzqXGr8AlW8v8dQkA==" - }, - "node_modules/leaflet-google-places-autocomplete": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/leaflet-google-places-autocomplete/-/leaflet-google-places-autocomplete-0.0.9.tgz", - "integrity": "sha512-NHefPZn53GQIjuAZmwEN/KTy8TobEu8kRU/WlYR58j5WrQU3vZ4w2OKVUCFzKU5jlWxeZP/SQTFhmXf2vkHIeQ==" - }, - "node_modules/leaflet-toolbar": { - "version": "0.4.0-alpha.2", - "resolved": "https://registry.npmjs.org/leaflet-toolbar/-/leaflet-toolbar-0.4.0-alpha.2.tgz", - "integrity": "sha512-g1KeU3DYGUOwXTS0vKIgJ8KgY0h/2B0qENNQUSYMFtSY2yzwaHWMbDyhDbk+aO8LgJ1iOX4fUt2bh1sYZbpmmQ==", - "peerDependencies": { - "leaflet": "*" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/liftup": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", - "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", - "dev": true, - "dependencies": { - "extend": "^3.0.2", - "findup-sync": "^4.0.0", - "fined": "^1.2.0", - "flagged-respawn": "^1.0.1", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.1", - "rechoir": "^0.7.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/liftup/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/liftup/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/liftup/node_modules/findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^4.0.2", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/liftup/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/liftup/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/liftup/node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/liftup/node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/liftup/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/livereload-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", - "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash._arraymap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arraymap/-/lodash._arraymap-3.0.0.tgz", - "integrity": "sha1-Go/Q9MDfS2HeoHbXF83Jfwo8PmY=", - "dev": true - }, - "node_modules/lodash._basecallback": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/lodash._basecallback/-/lodash._basecallback-3.3.1.tgz", - "integrity": "sha1-t7K7Q9whYEJKIczybFfkQ3cqjic=", - "dev": true, - "dependencies": { - "lodash._baseisequal": "^3.0.0", - "lodash._bindcallback": "^3.0.0", - "lodash.isarray": "^3.0.0", - "lodash.pairs": "^3.0.0" - } - }, - "node_modules/lodash._baseeach": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash._baseeach/-/lodash._baseeach-3.0.4.tgz", - "integrity": "sha1-z4cGVyyhROjZ11InyZDamC+TKvM=", - "dev": true, - "dependencies": { - "lodash.keys": "^3.0.0" - } - }, - "node_modules/lodash._baseget": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/lodash._baseget/-/lodash._baseget-3.7.2.tgz", - "integrity": "sha1-G2rh1frPPCVTI1ChPBGXy4u2dPQ=", - "dev": true - }, - "node_modules/lodash._baseisequal": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz", - "integrity": "sha1-2AJfdjOdKTQnZ9zIh85cuVpbUfE=", - "dev": true, - "dependencies": { - "lodash.isarray": "^3.0.0", - "lodash.istypedarray": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "node_modules/lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", - "dev": true - }, - "node_modules/lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "node_modules/lodash._topath": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/lodash._topath/-/lodash._topath-3.8.1.tgz", - "integrity": "sha1-PsXiYGAU9MuX91X+aRTt2L/ADqw=", - "dev": true, - "dependencies": { - "lodash.isarray": "^3.0.0" - } - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "node_modules/lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "node_modules/lodash.istypedarray": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz", - "integrity": "sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I=", - "dev": true - }, - "node_modules/lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "dependencies": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "node_modules/lodash.map": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-3.1.4.tgz", - "integrity": "sha1-tIOs0beGxce0ksSV97UmYim8AMI=", - "dev": true, - "dependencies": { - "lodash._arraymap": "^3.0.0", - "lodash._basecallback": "^3.0.0", - "lodash._baseeach": "^3.0.0", - "lodash.isarray": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.pairs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash.pairs/-/lodash.pairs-3.0.1.tgz", - "integrity": "sha1-u+CNV4bu6qCaFckevw3LfSvjJqk=", - "dev": true, - "dependencies": { - "lodash.keys": "^3.0.0" - } - }, - "node_modules/lodash.pluck": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.pluck/-/lodash.pluck-3.1.2.tgz", - "integrity": "sha1-s0fwN0wBafDusE1nLYnOyGMsIjE=", - "dev": true, - "dependencies": { - "lodash._baseget": "^3.0.0", - "lodash._topath": "^3.0.0", - "lodash.isarray": "^3.0.0", - "lodash.map": "^3.0.0" - } - }, - "node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "dependencies": { - "chalk": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log4js": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", - "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", - "dev": true, - "dependencies": { - "date-format": "^4.0.3", - "debug": "^4.3.3", - "flatted": "^3.2.4", - "rfdc": "^1.3.0", - "streamroller": "^3.0.2" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/log4js/node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true - }, - "node_modules/logform": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", - "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", - "dev": true, - "dependencies": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^2.3.3", - "ms": "^2.1.1", - "triple-beam": "^1.3.0" - } - }, - "node_modules/logform/node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", - "dev": true, - "dependencies": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/matchdep/node_modules/findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/matchdep/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "dependencies": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memfs": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.4.tgz", - "integrity": "sha512-W4gHNUE++1oSJVn8Y68jPXi+mkx3fXR5ITE/Ubz6EQ3xRpCN5k2CQ4AUR8094Z7211F876TyoBACGsIveqgiGA==", - "dev": true, - "dependencies": { - "fs-monkey": "1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/mocha/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/mocha/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/mocha/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/mocha/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/mocha/node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mocha/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/mocha/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mustache": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-3.2.1.tgz", - "integrity": "sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA==", - "dev": true, - "bin": { - "mustache": "bin/mustache" - }, - "engines": { - "npm": ">=1.4.0" - } - }, - "node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/nise": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz", - "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.8.3", - "@sinonjs/fake-timers": ">=5", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", - "dev": true - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "dependencies": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=", - "dev": true - }, - "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/onetime/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "dependencies": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "dependencies": { - "path-root-regex": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dev": true, - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-to-regexp/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "node_modules/phantomjs-prebuilt": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", - "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", - "deprecated": "this package is now deprecated", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "es6-promise": "^4.0.3", - "extract-zip": "^1.6.5", - "fs-extra": "^1.0.0", - "hasha": "^2.2.0", - "kew": "^0.7.0", - "progress": "^1.1.8", - "request": "^2.81.0", - "request-progress": "^2.0.1", - "which": "^1.2.10" - }, - "bin": { - "phantomjs": "bin/phantomjs" - } - }, - "node_modules/phantomjs-prebuilt/node_modules/progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/phantomjs-prebuilt/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/prettysize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/prettysize/-/prettysize-1.1.0.tgz", - "integrity": "sha512-U5Noa+FYV1dGkICyLJz8IWlDUehPF4Bk9tZRO8YqPhLA9EoiHuFqtnpWY2mvMjHh5eOLo82HipeLn4RIiSsGqQ==", - "dev": true - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true, - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.9.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", - "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", - "dev": true, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", - "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", - "dev": true, - "dependencies": { - "bytes": "1", - "string_decoder": "0.10" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", - "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", - "dev": true, - "dependencies": { - "throttleit": "^1.0.0" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", - "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rev-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rev-hash/-/rev-hash-3.0.0.tgz", - "integrity": "sha512-s+87HfEKAu95TaTxnbCobn0/BkbzR23LHSwVdYvr8mn5+PPjzy+hTWyh92b5oaLgig9TKPe5d6ZcubsVBtUrZg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safe-json-parse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", - "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", - "dev": true - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/schema-utils": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", - "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.0", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", - "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/send/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/should": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", - "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", - "dev": true, - "dependencies": { - "should-equal": "^2.0.0", - "should-format": "^3.0.3", - "should-type": "^1.4.0", - "should-type-adaptors": "^1.0.1", - "should-util": "^1.0.0" - } - }, - "node_modules/should-equal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", - "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", - "dev": true, - "dependencies": { - "should-type": "^1.4.0" - } - }, - "node_modules/should-format": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", - "dev": true, - "dependencies": { - "should-type": "^1.3.0", - "should-type-adaptors": "^1.0.1" - } - }, - "node_modules/should-type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", - "dev": true - }, - "node_modules/should-type-adaptors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", - "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", - "dev": true, - "dependencies": { - "should-type": "^1.3.0", - "should-util": "^1.0.0" - } - }, - "node_modules/should-util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", - "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", - "dev": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel/node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, - "node_modules/sinon": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.0.tgz", - "integrity": "sha512-ugA6BFmE+WrJdh0owRZHToLd32Uw3Lxq6E6LtNRU+xTVBefx632h03Q7apXWRsRdZAJ41LB8aUfn2+O4jsDNMw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.8.3", - "@sinonjs/fake-timers": "^9.1.2", - "@sinonjs/samsam": "^6.1.1", - "diff": "^5.0.0", - "nise": "^5.1.1", - "supports-color": "^7.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "node_modules/sinon/node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/sinon/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/sinon/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/socket.io": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", - "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.1.0", - "socket.io-adapter": "~2.3.3", - "socket.io-parser": "~4.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", - "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", - "dev": true - }, - "node_modules/socket.io-parser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", - "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", - "dev": true, - "dependencies": { - "@types/component-emitter": "^1.2.10", - "component-emitter": "~1.3.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs/node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/sockjs/node_modules/http-parser-js": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", - "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", - "dev": true - }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/sockjs/node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/spdy-transport/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/spdy-transport/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", - "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", - "dev": true, - "dependencies": { - "date-format": "^4.0.3", - "debug": "^4.1.1", - "fs-extra": "^10.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/streamroller/node_modules/fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/streamroller/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/string-template": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", - "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimleft": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", - "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimstart": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimright": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", - "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimend": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-sprite": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/svg-sprite/-/svg-sprite-1.5.0.tgz", - "integrity": "sha512-0mE5BLY3K8wg3+HrYfzpiKbIM44IGcg8uINED8ri22EdQbLvGecOHjRtkrNAlphbiU5kyGyqoBlIaukL45fs2Q==", - "dev": true, - "dependencies": { - "async": "^2.6.1", - "css-selector-parser": "^1.3.0", - "cssmin": "^0.4.3", - "cssom": "^0.3.4", - "dateformat": "^3.0.3", - "glob": "^7.1.3", - "js-yaml": "^3.12.0", - "lodash": "^4.17.11", - "lodash.pluck": "^3.1.2", - "mkdirp": "^0.5.1", - "mocha": "^5.2.0", - "mustache": "^3.0.0", - "phantomjs-prebuilt": "^2.1.16", - "prettysize": "^1.1.0", - "should": "^13.2.3", - "svgo": "^1.1.1", - "vinyl": "^2.2.0", - "winston": "^3.1.0", - "xmldom": "0.1.27", - "xpath": "^0.0.27", - "yargs": "^12.0.2" - }, - "bin": { - "svg-sprite": "bin/svg-sprite.js" - }, - "engines": { - "node": ">= 6.4.0" - } - }, - "node_modules/svg-sprite/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/svg-sprite/node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/svg-sprite/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/svg-sprite/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/svg-sprite/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/svg-sprite/node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "node_modules/svg-sprite/node_modules/mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "dependencies": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/svg-sprite/node_modules/mocha/node_modules/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/svg-sprite/node_modules/mocha/node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true, - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/svg-sprite/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/svg-sprite/node_modules/supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/table/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.0.tgz", - "integrity": "sha512-JC6qfIEkPBd9j1SMO3Pfn+A6w2kQV54tv+ABQLgZr7dA3k/DL/OBoYSWxzVpZev3J+bUHXfr55L8Mox7AaNo6g==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", - "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.7", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/tiny-lr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", - "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", - "dev": true, - "dependencies": { - "body": "^5.1.0", - "debug": "^3.1.0", - "faye-websocket": "~0.10.0", - "livereload-js": "^2.3.0", - "object-assign": "^4.1.0", - "qs": "^6.4.0" - } - }, - "node_modules/tiny-lr/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/tmp/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tmp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tmp/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", - "dev": true - }, - "node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "node_modules/ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/uglify-js": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.0.tgz", - "integrity": "sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==", - "dev": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/underscore.string": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", - "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", - "dev": true, - "dependencies": { - "sprintf-js": "^1.1.1", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/underscore.string/node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/webgl-distort": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/webgl-distort/-/webgl-distort-0.0.2.tgz", - "integrity": "sha1-gNL2HvxK7OKOeh/xN14UqsbQbzY=" - }, - "node_modules/webpack": { - "version": "5.74.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", - "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "cross-spawn": "^7.0.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-cli/node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/webpack-cli/node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords/node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/webpack-dev-middleware/node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz", - "integrity": "sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords/node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/webpack-dev-server/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", - "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-merge-and-include-globally": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/webpack-merge-and-include-globally/-/webpack-merge-and-include-globally-2.3.4.tgz", - "integrity": "sha512-s5dd7m3ycVBlC7C6GAx91JQzbjhxC/NJRuT2sCkg8WCcF8CE1x/7xwVXqgmt0Fr/H/0sX5C5HE2RdU6+vCY5yg==", - "dev": true, - "dependencies": { - "es6-promisify": "^6.1.1", - "glob": "^7.1.6", - "rev-hash": "^3.0.0" - }, - "peerDependencies": { - "webpack": ">=1.0.0" - } - }, - "node_modules/webpack-merge-and-include-globally/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/webpack-merge-and-include-globally/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", - "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.4.0 <0.4.11", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/winston": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", - "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "dev": true, - "dependencies": { - "async": "^2.6.1", - "diagnostics": "^1.1.1", - "is-stream": "^1.1.0", - "logform": "^2.1.1", - "one-time": "0.0.4", - "readable-stream": "^3.1.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.3.0" - }, - "engines": { - "node": ">= 6.4.0" - } - }, - "node_modules/winston-transport": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", - "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", - "dev": true, - "dependencies": { - "readable-stream": "^2.3.6", - "triple-beam": "^1.2.0" - }, - "engines": { - "node": ">= 6.4.0" - } - }, - "node_modules/winston-transport/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/winston-transport/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/winston/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/winston/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/winston/node_modules/safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - }, - "node_modules/winston/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xmldom": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", - "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", - "deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0", - "dev": true, - "engines": { - "node": ">=0.1" - } - }, - "node_modules/xpath": { - "version": "0.0.27", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", - "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==", - "dev": true, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "dependencies": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "node_modules/yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, "dependencies": { "@ampproject/remapping": { "version": "2.2.0", @@ -16622,8 +1745,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, - "requires": {} + "dev": true }, "@webpack-cli/info": { "version": "1.5.0", @@ -16638,8 +1760,7 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, - "requires": {} + "dev": true }, "@xtuc/ieee754": { "version": "1.2.0", @@ -16679,15 +1800,13 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} + "dev": true }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "ajv": { "version": "6.12.6", @@ -16734,8 +1853,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} + "dev": true }, "ansi-escapes": { "version": "3.2.0", @@ -18866,8 +3984,7 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "dev": true, - "requires": {} + "dev": true }, "eslint-scope": { "version": "7.1.1", @@ -21798,8 +6915,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/karma-babel-preprocessor/-/karma-babel-preprocessor-8.0.2.tgz", "integrity": "sha512-6ZUnHwaK2EyhgxbgeSJW6n6WZUYSEdekHIV/qDUnPgMkVzQBHEvd07d2mTL5AQjV8uTUgH6XslhaPrp+fHWH2A==", - "dev": true, - "requires": {} + "dev": true }, "karma-chrome-launcher": { "version": "3.1.1", @@ -21876,8 +6992,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz", "integrity": "sha1-TjRD8oMP3s/2JNN0cWPxIX2qKpo=", - "dev": true, - "requires": {} + "dev": true }, "kew": { "version": "0.7.0", @@ -21921,7 +7036,8 @@ "leaflet": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.8.0.tgz", - "integrity": "sha512-gwhMjFCQiYs3x/Sf+d49f10ERXaEFCPr+nVTryhAW8DWbMGqJqt9G4XuIaHmFW08zYvhgdzqXGr8AlW8v8dQkA==" + "integrity": "sha512-gwhMjFCQiYs3x/Sf+d49f10ERXaEFCPr+nVTryhAW8DWbMGqJqt9G4XuIaHmFW08zYvhgdzqXGr8AlW8v8dQkA==", + "dev": true }, "leaflet-google-places-autocomplete": { "version": "0.0.9", @@ -21931,8 +7047,7 @@ "leaflet-toolbar": { "version": "0.4.0-alpha.2", "resolved": "https://registry.npmjs.org/leaflet-toolbar/-/leaflet-toolbar-0.4.0-alpha.2.tgz", - "integrity": "sha512-g1KeU3DYGUOwXTS0vKIgJ8KgY0h/2B0qENNQUSYMFtSY2yzwaHWMbDyhDbk+aO8LgJ1iOX4fUt2bh1sYZbpmmQ==", - "requires": {} + "integrity": "sha512-g1KeU3DYGUOwXTS0vKIgJ8KgY0h/2B0qENNQUSYMFtSY2yzwaHWMbDyhDbk+aO8LgJ1iOX4fUt2bh1sYZbpmmQ==" }, "levn": { "version": "0.4.1", @@ -24780,12 +9895,6 @@ } } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, "string-template": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", @@ -24862,6 +9971,12 @@ "es-abstract": "^1.17.5" } }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -25948,8 +11063,7 @@ "version": "8.7.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", - "dev": true, - "requires": {} + "dev": true } } }, @@ -26211,8 +11325,7 @@ "version": "8.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true, - "requires": {} + "dev": true }, "xmldom": { "version": "0.1.27", diff --git a/src/edit/DistortableImage.Edit.js b/src/edit/DistortableImage.Edit.js index ebbdc8155..088d640f2 100644 --- a/src/edit/DistortableImage.Edit.js +++ b/src/edit/DistortableImage.Edit.js @@ -3,7 +3,7 @@ L.DistortableImage = L.DistortableImage || {}; // holds the keybindings & toolbar API for an individual image instance L.DistortableImage.Edit = L.Handler.extend({ options: { - opacity: 0.7, + opacity: 0.5, outline: '1px solid red', keymap: L.distortableImage.action_map, }, diff --git a/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js new file mode 100644 index 000000000..65d366961 --- /dev/null +++ b/src/edit/actions/OpacitiesAction.js @@ -0,0 +1,37 @@ +L.OpacitiesAction = L.EditAction.extend({ + initialize(map, overlay, options) { + const edit = overlay.editing; + const mode = edit._mode; + let use; + let tooltip; + + if (edit._transparent) { + use = 'opacity_empty'; + tooltip = overlay.options.translation.makeImageOpaque; + } else { + use = 'opacity'; + tooltip = overlay.options.translation.makeImageTransparent; + } + + options = options || {}; + options.toolbarIcon = { + svg: true, + html: use, + tooltip: tooltip, + className: mode === 'lock' ? 'disabled' : '', + }; + + L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; + + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + + addHooks() { + const edit = this._overlay.editing; + const link = this._link; + + L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty'); + L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); + edit._toggleOpacity(); + }, +}); diff --git a/src/edit/toolbars/DistortableImage.PopupBar.js b/src/edit/toolbars/DistortableImage.PopupBar.js index 998c36ff5..7952c4310 100644 --- a/src/edit/toolbars/DistortableImage.PopupBar.js +++ b/src/edit/toolbars/DistortableImage.PopupBar.js @@ -51,6 +51,7 @@ L.DistortableImageOverlay.addInitHook(function() { L.FreeRotateAction, L.LockAction, L.OpacityAction, + L.OpacitiesAction, L.BorderAction, L.ExportAction, L.DeleteAction, From 6c51ae43d61dd0c42d789a83f00f393a1e9ae0b3 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sat, 22 Oct 2022 03:21:13 +0200 Subject: [PATCH 03/73] actualitzar projecte --- .gitignore | 4 + dist/leaflet.distortableimage.js | 8292 +----------- dist/vendor.css | 1 + dist/vendor.js | 1 + package-lock.json | 14928 +++++++++++++++++++++- test/src/DistortableImageOverlaySpec.js | 2 +- 6 files changed, 14916 insertions(+), 8312 deletions(-) create mode 100644 dist/vendor.css create mode 100644 dist/vendor.js diff --git a/.gitignore b/.gitignore index b407d3097..60976d231 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,7 @@ package-lock.json dist/* !dist/leaflet.distortableimage.css !dist/leaflet.distortableimage.js +!dist/vendor.js +!dist/vendor.css +!node_modules/leaflet/dist/leaflet.css +!node_modules/leaflet/dist/leaflet.js diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 5cfcbf5d7..80edf9e49 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,8292 +1,2 @@ -/******/ (function() { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "./node_modules/ansi-html-community/index.js": -/*!***************************************************!*\ - !*** ./node_modules/ansi-html-community/index.js ***! - \***************************************************/ -/***/ (function(module) { - -"use strict"; - - -module.exports = ansiHTML - -// Reference to https://github.com/sindresorhus/ansi-regex -var _regANSI = /(?:(?:\u001b\[)|\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\u001b[A-M]/ - -var _defColors = { - reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR] - black: '000', - red: 'ff0000', - green: '209805', - yellow: 'e8bf03', - blue: '0000ff', - magenta: 'ff00ff', - cyan: '00ffee', - lightgrey: 'f0f0f0', - darkgrey: '888' -} -var _styles = { - 30: 'black', - 31: 'red', - 32: 'green', - 33: 'yellow', - 34: 'blue', - 35: 'magenta', - 36: 'cyan', - 37: 'lightgrey' -} -var _openTags = { - '1': 'font-weight:bold', // bold - '2': 'opacity:0.5', // dim - '3': '', // italic - '4': '', // underscore - '8': 'display:none', // hidden - '9': '' // delete -} -var _closeTags = { - '23': '', // reset italic - '24': '', // reset underscore - '29': '' // reset delete -} - -;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) { - _closeTags[n] = '' -}) - -/** - * Converts text with ANSI color codes to HTML markup. - * @param {String} text - * @returns {*} - */ -function ansiHTML (text) { - // Returns the text if the string has no ANSI escape code. - if (!_regANSI.test(text)) { - return text - } - - // Cache opened sequence. - var ansiCodes = [] - // Replace with markup. - var ret = text.replace(/\033\[(\d+)m/g, function (match, seq) { - var ot = _openTags[seq] - if (ot) { - // If current sequence has been opened, close it. - if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast - ansiCodes.pop() - return '' - } - // Open tag. - ansiCodes.push(seq) - return ot[0] === '<' ? ot : '' - } - - var ct = _closeTags[seq] - if (ct) { - // Pop sequence - ansiCodes.pop() - return ct - } - return '' - }) - - // Make sure tags are closed. - var l = ansiCodes.length - ;(l > 0) && (ret += Array(l + 1).join('')) - - return ret -} - -/** - * Customize colors. - * @param {Object} colors reference to _defColors - */ -ansiHTML.setColors = function (colors) { - if (typeof colors !== 'object') { - throw new Error('`colors` parameter must be an Object.') - } - - var _finalColors = {} - for (var key in _defColors) { - var hex = colors.hasOwnProperty(key) ? colors[key] : null - if (!hex) { - _finalColors[key] = _defColors[key] - continue - } - if ('reset' === key) { - if (typeof hex === 'string') { - hex = [hex] - } - if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) { - return typeof h !== 'string' - })) { - throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000') - } - var defHexColor = _defColors[key] - if (!hex[0]) { - hex[0] = defHexColor[0] - } - if (hex.length === 1 || !hex[1]) { - hex = [hex[0]] - hex.push(defHexColor[1]) - } - - hex = hex.slice(0, 2) - } else if (typeof hex !== 'string') { - throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000') - } - _finalColors[key] = hex - } - _setTags(_finalColors) -} - -/** - * Reset colors. - */ -ansiHTML.reset = function () { - _setTags(_defColors) -} - -/** - * Expose tags, including open and close. - * @type {Object} - */ -ansiHTML.tags = {} - -if (Object.defineProperty) { - Object.defineProperty(ansiHTML.tags, 'open', { - get: function () { return _openTags } - }) - Object.defineProperty(ansiHTML.tags, 'close', { - get: function () { return _closeTags } - }) -} else { - ansiHTML.tags.open = _openTags - ansiHTML.tags.close = _closeTags -} - -function _setTags (colors) { - // reset all - _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1] - // inverse - _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0] - // dark grey - _openTags['90'] = 'color:#' + colors.darkgrey - - for (var code in _styles) { - var color = _styles[code] - var oriColor = colors[color] || '000' - _openTags[code] = 'color:#' + oriColor - code = parseInt(code) - _openTags[(code + 10).toString()] = 'background:#' + oriColor - } -} - -ansiHTML.reset() - - -/***/ }), - -/***/ "./src/DistortableCollection.js": -/*!**************************************!*\ - !*** ./src/DistortableCollection.js ***! - \**************************************/ -/***/ (function() { - -L.DistortableCollection = L.FeatureGroup.extend({ - options: { - editable: true, - exportOpts: { - exportStartUrl: '//export.mapknitter.org/export', - statusUrl: '//export.mapknitter.org', - exportUrl: 'http://export.mapknitter.org/' - } - }, - initialize: function initialize(options) { - L.setOptions(this, options); - L.FeatureGroup.prototype.initialize.call(this, options); - L.Utils.initTranslation.call(this); - this.editable = this.options.editable; - }, - onAdd: function onAdd(map) { - L.FeatureGroup.prototype.onAdd.call(this, map); - this._map = map; - - if (this.editable) { - this.editing.enable(); - } - /** - * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable, - * events that need to be added on individual images are kept here to do so through `layeradd`. - */ - - - this.on('layeradd', this._addEvents, this); - this.on('layerremove', this._removeEvents, this); - }, - onRemove: function onRemove() { - if (this.editing) { - this.editing.disable(); - } - - this.off('layeradd', this._addEvents, this); - this.off('layerremove', this._removeEvents, this); - }, - _addEvents: function _addEvents(e) { - var layer = e.layer; - L.DomEvent.on(layer, { - dragstart: this._dragStartMultiple, - drag: this._dragMultiple - }, this); - L.DomEvent.on(layer.getElement(), { - mousedown: this._deselectOthers, - - /* Enable longpress for multi select for touch devices. */ - contextmenu: this._longPressMultiSelect - }, this); - }, - _removeEvents: function _removeEvents(e) { - var layer = e.layer; - L.DomEvent.off(layer, { - dragstart: this._dragStartMultiple, - drag: this._dragMultiple - }, this); - L.DomEvent.off(layer.getElement(), { - mousedown: this._deselectOthers, - contextmenu: this._longPressMultiSelect - }, this); - }, - _longPressMultiSelect: function _longPressMultiSelect(e) { - var _this = this; - - if (!this.editable) { - return; - } - - e.preventDefault(); - this.eachLayer(function (layer) { - var edit = layer.editing; - - if (layer.getElement() === e.target && edit.enabled()) { - L.DomUtil.toggleClass(layer.getElement(), 'collected'); - - if (_this.anyCollected()) { - layer.deselect(); - - _this.editing._addToolbar(); - } else { - _this.editing._removeToolbar(); - } - } - }); - }, - isCollected: function isCollected(overlay) { - return L.DomUtil.hasClass(overlay.getElement(), 'collected'); - }, - anyCollected: function anyCollected() { - var layerArr = this.getLayers(); - return layerArr.some(this.isCollected.bind(this)); - }, - _toggleCollected: function _toggleCollected(e, layer) { - if (e.shiftKey) { - /* conditional prevents disabled images from flickering multi-select mode */ - if (layer.editing.enabled()) { - L.DomUtil.toggleClass(e.target, 'collected'); - } - } - - if (this.anyCollected()) { - layer.deselect(); - } else { - this.editing._removeToolbar(); - } - }, - _deselectOthers: function _deselectOthers(e) { - var _this2 = this; - - if (!this.editable) { - return; - } - - this.eachLayer(function (layer) { - if (layer.getElement() !== e.target) { - layer.deselect(); - } else { - _this2._toggleCollected(e, layer); - } - }); - - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - _dragStartMultiple: function _dragStartMultiple(e) { - var overlay = e.target; - var map = this._map; - var i; - - if (!this.isCollected(overlay)) { - return; - } - - this.eachLayer(function (layer) { - layer._dragStartPoints = {}; - layer.deselect(); - - for (i = 0; i < 4; i++) { - var c = layer.getCorner(i); - layer._dragStartPoints[i] = map.latLngToLayerPoint(c); - } - }); - }, - _dragMultiple: function _dragMultiple(e) { - var overlay = e.target; - var map = this._map; - - if (!this.isCollected(overlay)) { - return; - } - - var topLeft = map.latLngToLayerPoint(overlay.getCorner(0)); - - var delta = overlay._dragStartPoints[0].subtract(topLeft); - - this._updateCollectionFromPoints(delta, overlay); - }, - _toRemove: function _toRemove() { - var _this3 = this; - - var layerArr = this.getLayers(); - return layerArr.filter(function (layer) { - var mode = layer.editing._mode; - return _this3.isCollected(layer) && mode !== 'lock'; - }); - }, - _toMove: function _toMove(overlay) { - var _this4 = this; - - var layerArr = this.getLayers(); - return layerArr.filter(function (layer) { - var mode = layer.editing._mode; - return layer !== overlay && _this4.isCollected(layer) && mode !== 'lock'; - }); - }, - _updateCollectionFromPoints: function _updateCollectionFromPoints(delta, overlay) { - var layersToMove = this._toMove(overlay); - - var p = new L.Transformation(1, -delta.x, 1, -delta.y); - var i; - layersToMove.forEach(function (layer) { - var movedPoints = {}; - - for (i = 0; i < 4; i++) { - movedPoints[i] = p.transform(layer._dragStartPoints[i]); - } - - layer.setCornersFromPoints(movedPoints); - }); - }, - _getAvgCmPerPixel: function _getAvgCmPerPixel(imgs) { - var reduce = imgs.reduce(function (sum, img) { - return sum + img.cm_per_pixel; - }, 0); - return reduce / imgs.length; - }, - generateExportJson: function generateExportJson() { - var json = {}; - json.images = []; - this.eachLayer(function (layer) { - if (this.isCollected(layer)) { - var sections = layer._image.src.split('/'); - - var filename = sections[sections.length - 1]; - var zc = layer.getCorners(); - var corners = [{ - lat: zc[0].lat, - lon: zc[0].lng - }, { - lat: zc[1].lat, - lon: zc[1].lng - }, { - lat: zc[3].lat, - lon: zc[3].lng - }, { - lat: zc[2].lat, - lon: zc[2].lng - }]; - json.images.push({ - id: this.getLayerId(layer), - src: layer._image.src, - width: layer._image.width, - height: layer._image.height, - image_file_name: filename, - nodes: corners, - cm_per_pixel: L.ImageUtil.getCmPerPixel(layer) - }); - } - }, this); - json.images = json.images.reverse(); - json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images); - return json; - } -}); - -L.distortableCollection = function (id, options) { - return new L.DistortableCollection(id, options); -}; - -/***/ }), - -/***/ "./src/DistortableImageOverlay.js": -/*!****************************************!*\ - !*** ./src/DistortableImageOverlay.js ***! - \****************************************/ -/***/ (function() { - -L.DistortableImageOverlay = L.ImageOverlay.extend({ - options: { - height: 200, - crossOrigin: true, - // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding) - edgeMinWidth: 50, - editable: true, - mode: 'distort', - selected: false - }, - initialize: function initialize(url, options) { - L.setOptions(this, options); - L.Utils.initTranslation.call(this); - this.edgeMinWidth = this.options.edgeMinWidth; - this.editable = this.options.editable; - this._selected = this.options.selected; - this._url = url; - this.rotation = {}; - }, - onAdd: function onAdd(map) { - var _this = this; - - this._map = map; - - if (!this.getElement()) { - this._initImage(); - } - - map.on('viewreset', this._reset, this); - - if (this.options.corners) { - this._corners = this.options.corners; - - if (map.options.zoomAnimation && L.Browser.any3d) { - map.on('zoomanim', this._animateZoom, this); - } - } // Have to wait for the image to load because need to access its w/h - - - L.DomEvent.on(this.getElement(), 'load', function () { - _this.getPane().appendChild(_this.getElement()); - - _this._initImageDimensions(); - - if (_this.options.rotation) { - var units = _this.options.rotation.deg ? 'deg' : 'rad'; - - _this.setAngle(_this.options.rotation[units], units); - } else { - _this.rotation = { - deg: 0, - rad: 0 - }; - - _this._reset(); - } - /* Initialize default corners if not already set */ - - - if (!_this._corners) { - if (map.options.zoomAnimation && L.Browser.any3d) { - map.on('zoomanim', _this._animateZoom, _this); - } - } - /** if there is a featureGroup, only its editable option matters */ - - - var eventParents = _this._eventParents; - - if (eventParents) { - _this.eP = eventParents[Object.keys(eventParents)[0]]; - - if (_this.eP.editable) { - _this.editing.enable(); - } - } else { - if (_this.editable) { - _this.editing.enable(); - } - - _this.eP = null; - } - }); - L.DomEvent.on(this.getElement(), 'click', this.select, this); - L.DomEvent.on(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick - }, this); - /** - * custom events fired from DoubleClickLabels.js. Used to differentiate - * single / dblclick to not deselect images on map dblclick. - */ - - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.on(map, 'click', this.deselect, this); - } - - this.fire('add'); - }, - onRemove: function onRemove(map) { - L.DomEvent.off(this.getElement(), 'click', this.select, this); - L.DomEvent.off(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick - }, this); - L.DomEvent.off(map, 'click', this.deselect, this); - - if (this.editing) { - this.editing.disable(); - } - - this.fire('remove'); - L.ImageOverlay.prototype.onRemove.call(this, map); - }, - _initImageDimensions: function _initImageDimensions() { - var map = this._map; - var originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width'); - var originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height'); - var aspectRatio = parseInt(originalImageWidth) / parseInt(originalImageHeight); - var imageHeight = this.options.height; - var imageWidth = parseInt(aspectRatio * imageHeight); - var center = map.project(map.getCenter()); - var offset = L.point(imageWidth, imageHeight).divideBy(2); - - if (this.options.corners) { - this._corners = this.options.corners; - } else { - this._corners = [map.unproject(center.subtract(offset)), map.unproject(center.add(L.point(offset.x, -offset.y))), map.unproject(center.add(L.point(-offset.x, offset.y))), map.unproject(center.add(offset))]; - } - - this._initialDimensions = { - 'center': center, - 'offset': offset, - 'zoom': map.getZoom() - }; - this.setBounds(L.latLngBounds(this.getCorners())); - }, - _singleClick: function _singleClick(e) { - if (e.type === 'singleclick') { - this.deselect(); - } else { - return; - } - }, - _singleClickListeners: function _singleClickListeners() { - var map = this._map; - L.DomEvent.off(map, 'click', this.deselect, this); - L.DomEvent.on(map, 'singleclick', this.deselect, this); - }, - _resetClickListeners: function _resetClickListeners() { - var map = this._map; - L.DomEvent.on(map, 'click', this.deselect, this); - L.DomEvent.off(map, 'singleclick', this.deselect, this); - }, - isSelected: function isSelected() { - return this._selected; - }, - deselect: function deselect() { - var edit = this.editing; - - if (!edit.enabled()) { - return; - } - - edit._removeToolbar(); - - edit._hideMarkers(); - - this._selected = false; - this.fire('deselect'); - return this; - }, - select: function select(e) { - var edit = this.editing; - var eP = this.eP; - - if (!edit.enabled()) { - return; - } - - if (e) { - L.DomEvent.stopPropagation(e); - } // this ensures deselection of all other images, allowing us to keep collection group optional - - - this._programmaticGrouping(); - - this._selected = true; - - edit._addToolbar(); - - edit._showMarkers(); - - this.fire('select'); // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it - - if (eP && eP.anyCollected()) { - this.deselect(); - return; - } - - return this; - }, - _programmaticGrouping: function _programmaticGrouping() { - this._map.eachLayer(function (layer) { - if (layer instanceof L.DistortableImageOverlay) { - layer.deselect(); - } - }); - }, - setCorner: function setCorner(corner, latlng) { - var edit = this.editing; - this._corners[corner] = latlng; - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - - this.edited = true; - return this; - }, - _cornerExceedsMapLats: function _cornerExceedsMapLats(zoom, corner, map) { - if (map.options.crs == L.CRS.Simple) { - return false; - } else { - var exceedsTop; - var exceedsBottom; - - if (zoom === 0) { - exceedsTop = map.project(corner).y < 2; - exceedsBottom = map.project(corner).y >= 255; - } else { - exceedsTop = map.project(corner).y / zoom < 2; - exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255; - } - - return exceedsTop || exceedsBottom; - } - }, - setCorners: function setCorners(latlngObj) { - var map = this._map; - var zoom = map.getZoom(); - var edit = this.editing; - var i = 0; // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402 - - for (var k in latlngObj) { - if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) { - // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - return; - } - } - - for (var _k in latlngObj) { - this._corners[i] = latlngObj[_k]; - i += 1; - } - - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - - this.edited = true; - return this; - }, - setCornersFromPoints: function setCornersFromPoints(pointsObj) { - var map = this._map; - var zoom = map.getZoom(); - var edit = this.editing; - var i = 0; - - for (var k in pointsObj) { - var corner = map.layerPointToLatLng(pointsObj[k]); - - if (this._cornerExceedsMapLats(zoom, corner, map)) { - // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - return; - } - } - - for (var _k2 in pointsObj) { - this._corners[i] = map.layerPointToLatLng(pointsObj[_k2]); - i += 1; - } - - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - - this.edited = true; - return this; - }, - scaleBy: function scaleBy(scale) { - var map = this._map; - var center = map.project(this.getCenter()); - var i; - var p; - var scaledCorners = {}; - - if (scale === 0) { - return; - } - - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(center).multiplyBy(scale).add(center); - scaledCorners[i] = map.unproject(p); - } - - this.setCorners(scaledCorners); - return this; - }, - getAngle: function getAngle() { - var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'deg'; - var matrix = this.getElement().style[L.DomUtil.TRANSFORM].split('matrix3d')[1].slice(1, -1).split(','); - var row0x = matrix[0]; - var row0y = matrix[1]; - var row1x = matrix[4]; - var row1y = matrix[5]; - var determinant = row0x * row1y - row0y * row1x; - var angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad'); - - if (determinant < 0) { - angle += angle < 0 ? Math.PI : -Math.PI; - } - - if (angle < 0) { - angle = 2 * Math.PI + angle; - } - - return unit === 'deg' ? Math.round(L.TrigUtil.radiansToDegrees(angle)) : L.Util.formatNum(angle, 2); - }, - setAngle: function setAngle(angle) { - var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'deg'; - var currentAngle = this.getAngle(unit); - var angleToRotateBy = angle - currentAngle; - this.rotateBy(angleToRotateBy, unit); - return this; - }, - rotateBy: function rotateBy(angle) { - var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'deg'; - var map = this._map; - var center = map.project(this.getCenter()); - var corners = {}; - var i; - var p; - var q; - - if (unit === 'deg') { - angle = L.TrigUtil.degreesToRadians(angle); - } - - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(center); - q = L.point(Math.cos(angle) * p.x - Math.sin(angle) * p.y, Math.sin(angle) * p.x + Math.cos(angle) * p.y); - corners[i] = map.unproject(q.add(center)); - } - - this.setCorners(corners); - return this; - }, - dragBy: function dragBy(formerPoint, newPoint) { - var map = this._map; - var i; - var p; - var transCorners = {}; - var delta = map.project(formerPoint).subtract(map.project(newPoint)); - - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(delta); - transCorners[i] = map.unproject(p); - } - - this.setCorners(transCorners); - }, - restore: function restore() { - var map = this._map; - var center = this._initialDimensions.center; - var offset = this._initialDimensions.offset; - var zoom = this._initialDimensions.zoom; - var corners = [center.subtract(offset), center.add(L.point(offset.x, -offset.y)), center.add(L.point(-offset.x, offset.y)), center.add(offset)]; - - for (var i = 0; i < 4; i++) { - if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) { - this.setCorner(i, map.unproject(corners[i], zoom)); - } - } - - this.edited = false; - this.fire('restore'); - return this; - }, - - /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */ - - /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */ - _getTranslateString: function _getTranslateString(point) { - // on WebKit browsers (Chrome/Safari/iOS Safari/Android) - // using translate3d instead of translate - // makes animation smoother as it ensures HW accel is used. - // Firefox 13 doesn't care - // (same speed either way), Opera 12 doesn't support translate3d - var is3d = L.Browser.webkit3d; - var open = 'translate' + (is3d ? '3d' : '') + '('; - var close = (is3d ? ',0' : '') + ')'; - return open + point.x + 'px,' + point.y + 'px' + close; - }, - _reset: function _reset() { - var map = this._map; - var image = this.getElement(); - var latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map); - - var transformMatrix = this._calculateProjectiveTransform(latLngToLayerPoint); - - var topLeft = latLngToLayerPoint(this.getCorner(0)); - var warp = L.DomUtil.getMatrixString(transformMatrix); - - var translation = this._getTranslateString(topLeft); - /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ - - - image._leaflet_pos = topLeft; - image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); - /* Set origin to the upper-left corner rather than - * the center of the image, which is the default. - */ - - image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0'; - this.rotation.deg = this.getAngle(); - this.rotation.rad = this.getAngle('rad'); - }, - - /* - * Calculates the transform string that will be - * correct *at the end* of zooming. - * Leaflet then generates a CSS3 animation between the current transform and - * future transform which makes the transition appear smooth. - */ - _animateZoom: function _animateZoom(event) { - var map = this._map; - var image = this.getElement(); - - var latLngToNewLayerPoint = function latLngToNewLayerPoint(latlng) { - return map._latLngToNewLayerPoint(latlng, event.zoom, event.center); - }; - - var transformMatrix = this._calculateProjectiveTransform(latLngToNewLayerPoint); - - var topLeft = latLngToNewLayerPoint(this.getCorner(0)); - var warp = L.DomUtil.getMatrixString(transformMatrix); - - var translation = this._getTranslateString(topLeft); - /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ - - - image._leaflet_pos = topLeft; - image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); - }, - getCorners: function getCorners() { - return this._corners; - }, - getCorner: function getCorner(i) { - return this._corners[i]; - }, - // image (vertex) centroid calculation - getCenter: function getCenter() { - var map = this._map; - var reduce = this.getCorners().reduce(function (agg, corner) { - return agg.add(map.project(corner)); - }, L.point(0, 0)); - return map.unproject(reduce.divideBy(4)); - }, - _calculateProjectiveTransform: function _calculateProjectiveTransform(latLngToCartesian) { - /* Setting reasonable but made-up image defaults - * allow us to place images on the map before - * they've finished downloading. */ - var offset = latLngToCartesian(this.getCorner(0)); - var w = this.getElement().offsetWidth || 500; - var h = this.getElement().offsetHeight || 375; - var c = []; - var j; - /* Convert corners to container points (i.e. cartesian coordinates). */ - - for (j = 0; j < 4; j++) { - c.push(latLngToCartesian(this.getCorner(j))._subtract(offset)); - } - /* - * This matrix describes the action of - * the CSS transform on each corner of the image. - * It maps from the coordinate system centered - * at the upper left corner of the image - * to the region bounded by the latlngs in this._corners. - * For example: - * 0, 0, c[0].x, c[0].y - * says that the upper-left corner of the image - * maps to the first latlng in this._corners. - */ - - - return L.MatrixUtil.general2DProjection(0, 0, c[0].x, c[0].y, w, 0, c[1].x, c[1].y, 0, h, c[2].x, c[2].y, w, h, c[3].x, c[3].y); - } -}); - -L.distortableImageOverlay = function (id, options) { - return new L.DistortableImageOverlay(id, options); -}; - -L.Map.addInitHook(function () { - if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) { - L.DomUtil.addClass(this.getContainer(), 'ldi'); - } -}); - -/***/ }), - -/***/ "./src/components/DistortableImage.Keymapper.js": -/*!******************************************************!*\ - !*** ./src/components/DistortableImage.Keymapper.js ***! - \******************************************************/ -/***/ (function() { - -var _this = this; - -L.DomUtil = L.DomUtil || {}; -L.DistortableImage = L.DistortableImage || {}; -L.distortableImage = L.DistortableImage; -L.DistortableImage.Keymapper = L.Handler.extend({ - options: { - position: 'topright' - }, - initialize: function initialize(map, options) { - this._map = map; - L.setOptions(this, options); - }, - addHooks: function addHooks() { - if (!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 removeHooks() { - if (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 = false; - } - }, - _buildContainer: function _buildContainer() { - var container = L.DomUtil.create('div', 'ldi-keymapper-hide'); - container.setAttribute('id', 'ldi-keymapper'); - var divider = L.DomUtil.create('br', 'divider'); - container.appendChild(divider); - return container; - }, - _createButton: function _createButton() { - var toggler = L.DomUtil.create('a', ''); - toggler.innerHTML = L.IconUtil.create('keyboard_open'); - toggler.setAttribute('id', 'toggle-keymapper'); - toggler.setAttribute('href', '#'); - toggler.setAttribute('title', 'Show keymap'); // Will force screen readers like VoiceOver to read this as "Show keymap - button" - - toggler.setAttribute('role', 'button'); - toggler.setAttribute('aria-label', 'Show keymap'); - return toggler; - }, - _wrap: function _wrap() { - var wrap = L.DomUtil.create('div', ''); - wrap.setAttribute('id', 'keymapper-wrapper'); - wrap.style.display = 'none'; - return wrap; - }, - _setMapper: function _setMapper(container, wrap, button) { - this._keymapper = L.control({ - position: this.options.position - }); - - this._keymapper.onAdd = function () { - container.appendChild(wrap); - wrap.insertAdjacentHTML('beforeend', '' + '
' + - /* eslint-disable */ - '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
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
'); - /* eslint-enable */ - - container.appendChild(button); - return container; - }; - - this._keymapper.addTo(this._map); - }, - _toggleKeymapper: function _toggleKeymapper(e) { - e.preventDefault(); - this._container.className = this._container.className === 'ldi-keymapper leaflet-control' ? 'ldi-keymapper-hide leaflet-control' : 'ldi-keymapper leaflet-control'; - this._scrollWrapper.style.display = this._scrollWrapper.style.display === 'none' ? 'block' : 'none'; - this._toggler.innerHTML = this._toggler.innerHTML === 'close' ? L.IconUtil.create('keyboard_open') : 'close'; - L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap'); - L.DomUtil.toggleClass(this._toggler, 'close-icon'); - }, - _injectIconSet: function _injectIconSet() { - if (document.querySelector('#keymapper-iconset')) { - return; - } - - var el = L.DomUtil.create('div', ''); - el.id = 'keymapper-iconset'; - el.setAttribute('hidden', 'hidden'); - this._iconset = new L.KeymapperIconSet().render(); - el.innerHTML = this._iconset; - document.querySelector('.leaflet-control-container').appendChild(el); - } -}); -L.DistortableImage.Keymapper.addInitHook(function () { - L.DistortableImage.Keymapper.prototype._n = L.DistortableImage.Keymapper.prototype._n ? L.DistortableImage.Keymapper.prototype._n + 1 : 1; // dont enable keymapper for mobile - - if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) { - _this.enable(); - - _this._injectIconSet(); - } -}); - -L.distortableImage.keymapper = function (map, options) { - return new L.DistortableImage.Keymapper(map, options); -}; - -/***/ }), - -/***/ "./src/edit/DistortableCollection.Edit.js": -/*!************************************************!*\ - !*** ./src/edit/DistortableCollection.Edit.js ***! - \************************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; // this class holds the keybindings and toolbar API for an image collection instance - -L.DistortableCollection.Edit = L.Handler.extend({ - options: { - keymap: L.distortableImage.group_action_map - }, - initialize: function initialize(group, options) { - this._group = group; - this._exportOpts = group.options.exportOpts; - L.setOptions(this, options); - L.distortableImage.group_action_map.Escape = '_decollectAll'; - }, - addHooks: function addHooks() { - var group = this._group; - var map = 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); - - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.on(map, 'click', this._decollectAll, this); - } - - L.DomEvent.on(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick, - boxcollectend: this._addCollections - }, this); - this._group.editable = true; - - this._group.eachLayer(function (layer) { - return layer.editing.enable(); - }); - }, - removeHooks: function removeHooks() { - var group = this._group; - var map = group._map; - L.DomEvent.off(document, 'keydown', this._onKeyDown, this); - - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.off(map, 'click', this._decollectAll, this); - } - - L.DomEvent.off(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick, - boxcollectend: this._addCollections - }, this); - - this._decollectAll(); - - this._group.editable = false; - - this._group.eachLayer(function (layer) { - return layer.editing.disable(); - }); - }, - enable: function enable() { - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - this._enabled = false; - this.removeHooks(); - return this; - }, - _onKeyDown: function _onKeyDown(e) { - var keymap = this.options.keymap; - var handlerName = keymap[e.key]; - - if (!this[handlerName]) { - return; - } - - if (this._group.anyCollected()) { - this[handlerName].call(this); - } - }, - _singleClick: function _singleClick(e) { - if (e.type === 'singleclick') { - this._decollectAll(e); - } else { - return; - } - }, - _singleClickListeners: function _singleClickListeners() { - var map = this._group._map; - L.DomEvent.off(map, 'click', this._decollectAll, this); - L.DomEvent.on(map, 'singleclick', this._decollectAll, this); - }, - _resetClickListeners: function _resetClickListeners() { - var map = this._group._map; - L.DomEvent.on(map, 'click', this._decollectAll, this); - L.DomEvent.off(map, 'singleclick', this._decollectAll, this); - }, - _decollectAll: function _decollectAll(e) { - var oe; - - if (e) { - oe = e.originalEvent; - } - /** - * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete - * also prevents deselection following a click on a disabled img by differentiating it from the map - */ - - - if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) { - return; - } - - this._group.eachLayer(function (layer) { - L.DomUtil.removeClass(layer.getElement(), 'collected'); - layer.deselect(); - }); - - this._removeToolbar(); - - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - _unlockGroup: function _unlockGroup() { - var _this = this; - - if (!this.hasTool(L.UnlockAction)) { - return; - } - - this._group.eachLayer(function (layer) { - if (_this._group.isCollected(layer)) { - var edit = layer.editing; - - edit._unlock(); // unlock updates the layer's handles; deselect to ensure they're hidden - - - layer.deselect(); - } - }); - }, - _lockGroup: function _lockGroup() { - var _this2 = this; - - if (!this.hasTool(L.LockAction)) { - return; - } - - this._group.eachLayer(function (layer) { - if (_this2._group.isCollected(layer)) { - var edit = layer.editing; - - edit._lock(); // map.addLayer also deselects the image, so we reselect here - - - L.DomUtil.addClass(layer.getElement(), 'collected'); - } - }); - }, - _addCollections: function _addCollections(e) { - var _this3 = this; - - var box = e.boxCollectBounds; - var map = this._group._map; - - this._group.eachLayer(function (layer) { - var edit = layer.editing; - - if (layer.isSelected()) { - layer.deselect(); - } - - var zoom = map.getZoom(); - var center = map.getCenter(); - var imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1)); - imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center); - - if (box.intersects(imgBounds) && edit.enabled()) { - if (!_this3.toolbar) { - _this3._addToolbar(); - } - - L.DomUtil.addClass(layer.getElement(), 'collected'); - } - }); - }, - _removeGroup: function _removeGroup(e) { - var _this4 = this; - - if (!this.hasTool(L.DeleteAction)) { - return; - } - - var layersToRemove = this._group._toRemove(); - - var n = layersToRemove.length; - - if (n === 0) { - return; - } - - var choice = L.DomUtil.confirmDeletes(n); - - if (choice) { - layersToRemove.forEach(function (layer) { - _this4._group.removeLayer(layer); - }); - - if (!this._group.anyCollected()) { - this._removeToolbar(); - } - } - - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - cancelExport: function cancelExport() { - if (!this.customCollection) { - this._exportOpts.collection = undefined; - } - - clearInterval(this.updateInterval); - }, - _addToolbar: function _addToolbar() { - var group = this._group; - var map = group._map; - - if (group.options.suppressToolbar || this.toolbar) { - return; - } - - this.toolbar = L.distortableImage.controlBar({ - actions: this.editActions, - position: 'topleft' - }).addTo(map, group); - }, - _removeToolbar: function _removeToolbar() { - var map = this._group._map; - - if (this.toolbar) { - map.removeLayer(this.toolbar); - this.toolbar = false; - } else { - return false; - } - }, - hasTool: function hasTool(value) { - return this.editActions.some(function (action) { - return action === value; - }); - }, - addTool: function addTool(value) { - if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { - this._removeToolbar(); - - this.editActions.push(value); - - this._addToolbar(); - } - - return this; - }, - removeTool: function removeTool(value) { - var _this5 = this; - - this.editActions.some(function (item, idx) { - if (_this5.editActions[idx] === value) { - _this5._removeToolbar(); - - _this5.editActions.splice(idx, 1); - - _this5._addToolbar(); - - return true; - } else { - return false; - } - }); - return this; - }, - startExport: function startExport() { - var _this6 = this; - - if (!this.hasTool(L.ExportAction)) { - return; - } - - return new Promise(function (resolve) { - var opts = _this6._exportOpts; - opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion - - var statusUrl; - _this6.updateInterval = null; // this may be overridden to update the UI to show export progress or completion - - var _defaultUpdater = function _defaultUpdater(data) { - data = JSON.parse(data); // optimization: fetch status directly from google storage: - - if (data.status_url) { - if (statusUrl !== data.status_url && data.status_url.match('.json')) { - // if (data.status_url && data.status_url.substr(0,1) === "/") { - // opts.statusUrl = opts.statusUrl + data.status_url; - // } else { - statusUrl = data.status_url; // } - } - - if (data.status === 'complete') { - clearInterval(_this6.updateInterval); - - if (!_this6.customCollection) { - _this6._exportOpts.collection = undefined; - } - - resolve(); - - if (data.jpg !== null) { - alert('Export succeeded. ' + opts.exportUrl + data.jpg); - } - } // TODO: update to clearInterval when status == "failed" if we update that in this file: - // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb - - - console.log(data); - } - }; // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json; - // this may be overridden to integrate with any UI - - - var _defaultHandleStatusRes = function _defaultHandleStatusRes(data) { - statusUrl = opts.statusUrl + data; // repeatedly fetch the status.json - - _this6.updateInterval = setInterval(function () { - var reqOpts = { - method: 'GET' - }; - var req = new Request("".concat(statusUrl, "?").concat(Date.now()), reqOpts); - fetch(req).then(function (res) { - if (res.ok) { - return res.text(); - } - }).then(opts.updater); - }, opts.frequency); - }; // initiate the export - - - var _defaultFetchStatusUrl = function _defaultFetchStatusUrl(mergedOpts) { - var form = new FormData(); - form.append('collection', JSON.stringify(mergedOpts.collection)); - form.append('scale', mergedOpts.scale); - form.append('upload', true); - var reqOpts = { - method: 'POST', - body: form - }; - var req = new Request(mergedOpts.exportStartUrl, reqOpts); - fetch(req).then(function (res) { - if (res.ok) { - return res.text(); - } - }).then(mergedOpts.handleStatusRes); - }; // If the user has passed collection property - - - _this6.customCollection = !!opts.collection; - - if (!_this6.customCollection) { - opts.collection = _this6._group.generateExportJson().images; - } - - opts.frequency = opts.frequency || 3000; - opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel ! - - opts.updater = opts.updater || _defaultUpdater; - opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes; - opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl; - opts.fetchStatusUrl(opts); - }); - } -}); - -L.distortableCollection.edit = function (group, options) { - return new L.DistortableCollection.Edit(group, options); -}; - -/***/ }), - -/***/ "./src/edit/DistortableImage.Edit.js": -/*!*******************************************!*\ - !*** ./src/edit/DistortableImage.Edit.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; // holds the keybindings & toolbar API for an individual image instance - -L.DistortableImage.Edit = L.Handler.extend({ - options: { - opacity: 0.7, - outline: '1px solid red', - keymap: L.distortableImage.action_map - }, - initialize: function initialize(overlay, options) { - this._overlay = overlay; - this._toggledImage = false; - this._mode = overlay.options.mode; - this._transparent = false; - this._outlined = false; - L.setOptions(this, options); - L.distortableImage.action_map.Escape = '_deselect'; - }, - - /* Run on image selection. */ - addHooks: function addHooks() { - var overlay = this._overlay; - this.editActions = this.options.actions; - /* bring the selected image into view */ - - overlay.bringToFront(); - - this._initModes(); - - this._initHandles(); - - this._appendHandlesandDragable(); - - if (overlay.isSelected() && !overlay.options.suppressToolbar) { - this._addToolbar(); - } - - this.parentGroup = overlay.eP ? overlay.eP : false; - L.DomEvent.on(overlay.getElement(), { - dblclick: this.nextMode - }, this); - L.DomEvent.on(window, 'keydown', this._onKeyDown, this); - }, - - /* Run on image deselection. */ - removeHooks: function removeHooks() { - var overlay = this._overlay; - var eP = this.parentGroup; // First, check if dragging exists - it may be off due to locking - - this._disableDragging(); - - if (this.toolbar) { - this._removeToolbar(); - } - - for (var handle in this._handles) { - L.DomUtil.remove(handle); - } - /** - * ensures if you disable an image while it is multi-selected - * additional deselection logic is run - */ - - - if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) { - L.DomUtil.removeClass(overlay.getElement(), 'collected'); - } - - if (eP && !eP.anyCollected() && eP.editing.toolbar) { - eP.editing._removeToolbar(); - } - - L.DomEvent.off(overlay.getElement(), { - dblclick: this.nextMode - }, this); - L.DomEvent.off(window, 'keydown', this._onKeyDown, this); - }, - disable: function disable() { - if (!this._enabled) { - return this; - } - - this._overlay.deselect(); - - this._enabled = false; - this.removeHooks(); - return this; - }, - _initModes: function _initModes() { - this._modes = {}; // passed from L.DistortablImage.PopupBar. If the mode is one - // of the current toolbar actions, adds it to this._modes - - for (var mode in L.DistortableImage.Edit.MODES) { - var action = L.DistortableImage.Edit.MODES[mode]; - - if (this.editActions.indexOf(action) !== -1) { - this._modes[mode] = action; - } - } // sets the current mode to the 1st available one if the one selected - // during initialization is not available - - - if (!this._modes[this._mode]) { - this._mode = Object.keys(this._modes)[0]; - } - }, - _initHandles: function _initHandles() { - var overlay = this._overlay; - var i; - this._dragHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._dragHandles.addLayer(L.dragHandle(overlay, i)); - } - - this._scaleHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._scaleHandles.addLayer(L.scaleHandle(overlay, i)); - } - - this._distortHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._distortHandles.addLayer(L.distortHandle(overlay, i)); - } - - this._rotateHandles = L.layerGroup(); // individual rotate - - for (i = 0; i < 4; i++) { - this._rotateHandles.addLayer(L.rotateHandle(overlay, i)); - } // handle includes rotate AND scale - - - this._freeRotateHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i)); - } - - this._lockHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._lockHandles.addLayer(L.lockHandle(overlay, i, { - draggable: false - })); - } - - this._handles = { - drag: this._dragHandles, - scale: this._scaleHandles, - distort: this._distortHandles, - rotate: this._rotateHandles, - freeRotate: this._freeRotateHandles, - lock: this._lockHandles - }; - }, - _appendHandlesandDragable: function _appendHandlesandDragable() { - var ov = this._overlay; // won't throw error if user adds 0 mode actions to toolbar - - if (!this._mode) { - this._enableDragging(); - - return; - } - - this._updateHandle(); - - if (!ov.isSelected() && this.currentHandle) { - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(0); - - if (handle.dragging) { - handle.dragging.disable(); - } - }); - } - - if (!this.isMode('lock')) { - this._enableDragging(); - } - }, - _onKeyDown: function _onKeyDown(e) { - var keymap = this.options.keymap; - var handlerName = keymap[e.key]; - var ov = this._overlay; - var eP = this.parentGroup; - - if (eP && eP.anyCollected()) { - return; - } - - if (this[handlerName] !== undefined && !ov.options.suppressToolbar) { - if (ov.isSelected() && this.toolbar) { - this[handlerName].call(this); - } - } - }, - replaceTool: function replaceTool(old, next) { - var _this = this; - - if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) { - return this; - } - - this.editActions.some(function (item, idx) { - if (item === old) { - _this._removeToolbar(); - - _this.editActions[idx] = next; - - _this._addToolbar(); - - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === old) { - delete _this._modes[mode]; - - _this._nextOrNone(mode); - } else if (L.DistortableImage.Edit.MODES[mode] === next) { - _this._modes[mode] = next; - } - } - - return true; - } - }); - return this; - }, - addTool: function addTool(value) { - if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { - this._removeToolbar(); - - this.editActions.push(value); - - this._addToolbar(); - - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === value) { - this._modes[mode] = value; - } - } - - if (!this._overlay.isSelected()) { - this._removeToolbar(); - } - } - - return this; - }, - hasTool: function hasTool(value) { - return this.editActions.some(function (action) { - return action === value; - }); - }, - removeTool: function removeTool(value) { - var _this2 = this; - - this.editActions.some(function (item, idx) { - if (item === value) { - _this2._removeToolbar(); - - _this2.editActions.splice(idx, 1); - - _this2._addToolbar(); - - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === value) { - delete _this2._modes[mode]; - - _this2._nextOrNone(mode); - } - } - - return true; - } - }); - - if (!this._overlay.isSelected()) { - this._removeToolbar(); - } - - return this; - }, - // set the mode to the next mode or if that was the last one set mode to '' - _nextOrNone: function _nextOrNone(mode) { - if (this.isMode(mode)) { - if (Object.keys(this.getModes()).length >= 1) { - this.nextMode(); - } else { - if (mode === 'lock') { - this._enableDragging(); - } - - this._mode = ''; - - this._updateHandle(); - } - } - }, - _removeToolbar: function _removeToolbar() { - var ov = this._overlay; - var map = ov._map; - - if (this.toolbar) { - map.removeLayer(this.toolbar); - this.toolbar = false; - } - }, - _enableDragging: function _enableDragging() { - var _this3 = this; - - var overlay = this._overlay; - var map = overlay._map; - this.dragging = new L.Draggable(overlay.getElement()); - this.dragging.enable(); - /* Hide toolbars and markers while dragging; click will re-show it */ - - this.dragging.on('dragstart', function () { - overlay.fire('dragstart'); - - _this3._removeToolbar(); - }); - /* - * Adjust default behavior of L.Draggable, which overwrites the CSS3 - * distort transformations that we set when it calls L.DomUtil.setPosition. - */ - - this.dragging._updatePosition = function () { - var topLeft = overlay.getCorner(0); - - var delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft)); - - var currentPoint; - var corners = {}; - var i; - this.fire('predrag'); - - for (i = 0; i < 4; i++) { - currentPoint = map.latLngToLayerPoint(overlay.getCorner(i)); - corners[i] = map.layerPointToLatLng(currentPoint.add(delta)); - } - - overlay.setCorners(corners); - overlay.fire('drag'); - this.fire('drag'); - }; - - this.dragging.on('dragend', function () { - overlay.fire('dragend'); - }); - }, - _disableDragging: function _disableDragging() { - if (this.dragging) { - this.dragging.disable(); - delete this.dragging; - } - }, - _dragMode: function _dragMode() { - this.setMode('drag'); - }, - _scaleMode: function _scaleMode() { - this.setMode('scale'); - }, - _distortMode: function _distortMode() { - this.setMode('distort'); - }, - _rotateMode: function _rotateMode() { - this.setMode('rotate'); - }, - _freeRotateMode: function _freeRotateMode() { - this.setMode('freeRotate'); - }, - _toggleLockMode: function _toggleLockMode() { - if (this.isMode('lock')) { - this._unlock(); - } else { - this._lock(); - } - }, - _toggleOpacity: function _toggleOpacity() { - var image = this._overlay.getElement(); - - var opacity; - - if (!this.hasTool(L.OpacityAction)) { - return; - } - - this._transparent = !this._transparent; - opacity = this._transparent ? this.options.opacity : 1; - L.DomUtil.setOpacity(image, opacity); - image.setAttribute('opacity', opacity); - - this._refresh(); - }, - _toggleBorder: function _toggleBorder() { - var image = this._overlay.getElement(); - - var outline; - - if (!this.hasTool(L.BorderAction)) { - return; - } - - this._outlined = !this._outlined; - outline = this._outlined ? this.options.outline : 'none'; - image.style.outline = outline; - - this._refresh(); - }, - // compare this to using overlay zIndex - _toggleOrder: function _toggleOrder() { - if (this._toggledImage) { - this._stackUp(); - } else { - this._stackDown(); - } - }, - _removeOverlay: function _removeOverlay() { - var ov = this._overlay; - var eP = this.parentGroup; - - if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { - return; - } - - var choice = L.DomUtil.confirmDelete(); - - if (!choice) { - return; - } - - this._removeToolbar(); - - if (eP) { - eP.removeLayer(ov); - } else { - ov._map.removeLayer(ov); - } - }, - // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82 - _getExport: function _getExport() { - var overlay = this._overlay; - var map = overlay._map; - var img = overlay.getElement(); - - if (!this.hasTool(L.ExportAction)) { - return; - } // make a new image - - - var downloadable = new Image(); - downloadable.id = downloadable.id || 'tempId12345'; - document.body.appendChild(downloadable); - - downloadable.onload = function onLoadDownloadableImage() { - var height = downloadable.height; - var width = downloadable.width; - var nw = map.latLngToLayerPoint(overlay.getCorner(0)); - var ne = map.latLngToLayerPoint(overlay.getCorner(1)); - var sw = map.latLngToLayerPoint(overlay.getCorner(2)); - var se = map.latLngToLayerPoint(overlay.getCorner(3)); // I think this is to move the image to the upper left corner, - // eslint-disable-next-line max-len - // jywarren: i think we may need these or the image goes off the edge of the canvas - // jywarren: but these seem to break the distortion math... - // jywarren: i think it should be rejiggered so it - // finds the most negative values of x and y and then - // adds those to all coordinates - // nw.x -= nw.x; - // ne.x -= nw.x; - // se.x -= nw.x; - // sw.x -= nw.x; - // nw.y -= nw.y; - // ne.y -= nw.y; - // se.y -= nw.y; - // sw.y -= nw.y; - // run once warping is complete - - downloadable.onload = function () { - L.DomUtil.remove(downloadable); - }; - - if (window && window.hasOwnProperty('warpWebGl')) { - warpWebGl(downloadable.id, [0, 0, width, 0, width, height, 0, height], [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y], true // trigger download - ); - } - }; - - downloadable.src = overlay.options.fullResolutionSrc || img.src; - }, - _stackUp: function _stackUp() { - var t = this._toggledImage; - - if (!t || !this.hasTool(L.StackAction)) { - return; - } - - this._toggledImage = false; - - this._overlay.bringToFront(); - - this._refresh(); - }, - _stackDown: function _stackDown() { - var t = this._toggledImage; - - if (t || !this.hasTool(L.StackAction)) { - return; - } - - this._toggledImage = true; - - this._overlay.bringToBack(); - - this._refresh(); - }, - _unlock: function _unlock() { - var ov = this._overlay; - var map = ov._map; - var eP = this.parentGroup; - - if (!this.isMode('lock')) { - return; - } - - if (eP && !eP.isCollected(ov) || !eP) { - if (!this.hasTool(L.LockAction)) { - return; - } - } - - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - - if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) { - this._mode = ''; - this.currentHandle = ''; - } else { - this._mode = ov.options.mode; - } - - this._updateHandle(); - - this._enableDragging(); - - this._refresh(); - }, - _lock: function _lock() { - var ov = this._overlay; - var map = ov._map; - var eP = this.parentGroup; - - if (this.isMode('lock')) { - return; - } - - if (eP && !eP.isCollected(ov) || !eP) { - if (!this.hasTool(L.LockAction)) { - return; - } - } - - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - - this._mode = 'lock'; - - this._updateHandle(); - - this._disableDragging(); - - this._refresh(); - }, - _deselect: function _deselect() { - this._overlay.deselect(); - }, - _showMarkers: function _showMarkers(e) { - var eP = this.parentGroup; - - if (!this.currentHandle) { - return; - } // only markers we want in collect interface for now is lock - - - if (!this.isMode('lock') && eP && eP.anyCollected()) { - return; - } - - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(1); - - if (handle.dragging) { - handle.dragging.enable(); - } - - L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive'); - }); - }, - _hideMarkers: function _hideMarkers() { - var ov = this._overlay; - var eP = this.parentGroup; // workaround for race condition w/ feature group - - if (!this._handles) { - this._initHandles(); - } - - if (!this.currentHandle) { - return; - } - - if (this.isMode('lock') && eP && eP.isCollected(ov)) { - return; - } - - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(0); - - if (handle.dragging) { - handle.dragging.disable(); - } - - L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive'); - }); - }, - _updateHandle: function _updateHandle() { - var ov = this._overlay; - var map = ov._map; - var mode = this.getMode(); - - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - - this.currentHandle = mode === '' ? '' : this._handles[mode]; - - if (this.currentHandle !== '') { - map.addLayer(this.currentHandle); - } - }, - _addToolbar: function _addToolbar() { - var ov = this._overlay; - var eP = this.parentGroup; - var map = ov._map; // Find the topmost point on the image. - - var corners = ov.getCorners(); - var maxLat = -Infinity; - - if (eP && eP.anyCollected()) { - eP.editing._addToolbar(); - - return; - } - - if (ov.options.suppressToolbar || this.toolbar) { - return; - } - - for (var i = 0; i < corners.length; i++) { - if (corners[i].lat > maxLat) { - maxLat = corners[i].lat; - } - } // Longitude is based on the centroid of the image. - - - var raisedPoint = ov.getCenter(); - raisedPoint.lat = maxLat; - this.toolbar = L.distortableImage.popupBar(raisedPoint, { - actions: this.editActions - }).addTo(map, ov); - ov.fire('toolbar:created'); - }, - _refresh: function _refresh() { - if (this.toolbar) { - this._removeToolbar(); - } - - this._addToolbar(); - }, - _updateToolbarPos: function _updateToolbarPos() { - var overlay = this._overlay; // Find the topmost point on the image. - - var corners = overlay.getCorners(); - var toolbar = this.toolbar; - var maxLat = -Infinity; - - if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) { - for (var i = 0; i < corners.length; i++) { - if (corners[i].lat > maxLat) { - maxLat = corners[i].lat; - } - } // Longitude is based on the centroid of the image. - - - var raisedPoint = overlay.getCenter(); - raisedPoint.lat = maxLat; - - if (!overlay.options.suppressToolbar) { - this.toolbar.setLatLng(raisedPoint); - } - } - }, - hasMode: function hasMode(mode) { - return !!this._modes[mode]; - }, - getMode: function getMode() { - if (!this.enabled()) { - return; - } - - return this._mode; - }, - getModes: function getModes() { - return this._modes; - }, - isMode: function isMode(mode) { - if (!this.enabled()) { - return false; - } - - return this._mode === mode; - }, - setMode: function setMode(newMode) { - var ov = this._overlay; - var eP = this.parentGroup; - var mode = this.getMode(); - - if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) { - return; - } - - if (this.toolbar) { - this.toolbar.clickTool(newMode); - } - - if (this.isMode('lock') && !this.dragging) { - this._enableDragging(); - } - - this._mode = newMode; - - if (this.isMode('lock')) { - this._disableDragging(); - } - - this._updateHandle(); - - this._refresh(); - - if (eP && eP.isCollected(ov)) { - ov.deselect(); - } - - return this; - }, - - /** - * need to attach a stop to img dblclick or it will propagate to - * the map and fire the handler that shows map location labels on map dblclick. - */ - nextMode: function nextMode(e) { - var mode = this.getMode(); - var eP = this.parentGroup; - var modesArray = Object.keys(this.getModes()); - var idx = modesArray.indexOf(mode); - var nextIdx = (idx + 1) % modesArray.length; - var newMode = modesArray[nextIdx]; - - if (e) { - if (eP && eP.anyCollected()) { - return; - } - - L.DomEvent.stop(e); - } - - return this.setMode(newMode); - } -}); - -L.distortableImage.edit = function (overlay, options) { - return new L.DistortableImage.Edit(overlay, options); -}; - -/***/ }), - -/***/ "./src/edit/actions/BorderAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/BorderAction.js ***! - \******************************************/ -/***/ (function() { - -L.BorderAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var mode = edit._mode; - var use; - var tooltip; - - if (edit._outlined) { - use = 'border_outer'; - tooltip = overlay.options.translation.removeBorder; - } else { - use = 'border_clear'; - tooltip = overlay.options.translation.addBorder; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: mode === 'lock' ? 'disabled' : '' - }; // conditional for disabling keybindings for this action when the image is locked. - - L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer'); - L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border'); - - edit._toggleBorder(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DeleteAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/DeleteAction.js ***! - \******************************************/ -/***/ (function() { - -L.DeleteAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use = 'delete_forever'; - var tooltip; - /** - * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only - * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods. - */ - - if (edit instanceof L.DistortableImage.Edit) { - tooltip = overlay.options.translation.deleteImage; // backspace windows / delete mac - - L.DistortableImage.action_map.Backspace = edit._mode === 'lock' ? '' : '_removeOverlay'; - } else { - tooltip = overlay.options.translation.deleteImages; - L.DistortableImage.group_action_map.Backspace = edit._mode === 'lock' ? '' : '_removeGroup'; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - if (edit instanceof L.DistortableImage.Edit) { - edit._removeOverlay(); - } else { - edit._removeGroup(); - } - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DistortAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/DistortAction.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'distort', - tooltip: overlay.options.translation.distortImage, - className: 'distort' - }; - L.DistortableImage.action_map.d = '_distortMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._distortMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DragAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/DragAction.js ***! - \****************************************/ -/***/ (function() { - -L.DragAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'drag', - tooltip: overlay.options.translation.dragImage, - className: 'drag' - }; - L.DistortableImage.action_map.D = '_dragMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._dragMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/EditAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/EditAction.js ***! - \****************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; -L.distortableImage = L.DistortableImage; -L.DistortableImage.action_map = {}; -L.EditAction = L.Toolbar2.Action.extend({ - options: { - toolbarIcon: { - svg: false, - html: '', - className: '', - tooltip: '' - } - }, - initialize: function initialize(map, overlay, options) { - this._overlay = overlay; - this._map = map; - L.setOptions(this, options); - L.Toolbar2.Action.prototype.initialize.call(this, options); - - this._injectIconSet(); - }, - _createIcon: function _createIcon(toolbar, container, args) { - var _this = this; - - var iconOptions = this.options.toolbarIcon; - var className = iconOptions.className; - var edit = this._overlay.editing; - this.toolbar = toolbar; - this._icon = L.DomUtil.create('li', '', container); - this._link = L.DomUtil.create('a', '', this._icon); - - if (iconOptions.svg) { - this._link.innerHTML = L.IconUtil.create(iconOptions.html); - } else { - this._link.innerHTML = iconOptions.html; - } - - this._link.setAttribute('href', '#'); - - this._link.setAttribute('title', iconOptions.tooltip); - - this._link.setAttribute('role', 'button'); - - L.DomUtil.addClass(this._link, this.constructor.baseClass); - - if (className) { - L.DomUtil.addClass(this._link, className); - - if (className === 'disabled') { - L.DomUtil.addClass(this._icon, className); - } - - if (className === edit._mode) { - L.DomUtil.addClass(this._link, 'selected-mode'); - } else { - L.DomUtil.removeClass(this._link, 'selected-mode'); - } - } - - L.DomEvent.on(this._link, 'click', this.enable, this); - L.DomEvent.on(this._overlay, 'update', function () { - var match = _this._link.innerHTML.match(/xlink:href="#restore"/); - - if (match && match.length === 1) { - _this._enableAction(); - } - }); - /* Add secondary toolbar */ - - this._addSubToolbar(toolbar, this._icon, args); - }, - _injectIconSet: function _injectIconSet() { - if (document.querySelector('#iconset')) { - return; - } - - var el = document.createElement('div'); - el.id = 'iconset'; - el.setAttribute('hidden', 'hidden'); - el.innerHTML = new L.ToolbarIconSet().render(); - document.querySelector('.leaflet-marker-pane').appendChild(el); - }, - _enableAction: function _enableAction() { - L.DomUtil.removeClass(this._link.parentElement, 'disabled'); - L.DomUtil.removeClass(this._link, 'disabled'); - }, - _disableAction: function _disableAction() { - L.DomUtil.addClass(this._link.parentElement, 'disabled'); - L.DomUtil.addClass(this._link, 'disabled'); - } -}); - -L.editAction = function (map, overlay, options) { - return new L.EditAction(map, overlay, options); -}; - -/***/ }), - -/***/ "./src/edit/actions/ExportAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/ExportAction.js ***! - \******************************************/ -/***/ (function() { - -L.ExportAction = L.EditAction.extend({ - // This function is executed every time we select an image - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var tooltip; - this.isExporting = false; - this.mouseLeaveSkip = true; - this.isHooksExecuted = false; - - if (edit instanceof L.DistortableImage.Edit) { - L.DistortableImage.action_map.e = '_getExport'; - tooltip = overlay.options.translation.exportImage; - } else { - L.DistortableImage.group_action_map.e = 'runExporter'; - tooltip = overlay.options.translation.exportImages; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'get_app', - tooltip: tooltip - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - if (edit instanceof L.DistortableImage.Edit) { - edit._getExport(); - - return; - } // Make sure that addHooks is executed only once, event listeners will handle the rest - - - if (this.isHooksExecuted) { - return; - } else { - this.isHooksExecuted = true; - } - - var exportTool = this._link.parentElement; - this.mouseEnterHandler = this.handleMouseEnter.bind(this); - this.mouseLeaveHandler = this.handleMouseLeave.bind(this); - L.DomEvent.on(exportTool, 'click', function () { - if (!this.isExporting) { - this.isExporting = true; - this.renderExportIcon(); - setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100); - edit.runExporter().then(function () { - this.resetState(); - this.detachMouseEventListeners(exportTool); - }.bind(this)); - } else { - // Clicking on the export icon after export has started will be ignored - if (this.mouseLeaveSkip) { - return; - } - - this.resetState(); - this.detachMouseEventListeners(exportTool); - edit.cancelExport(); - } - }, this); - }, - resetState: function resetState() { - this.renderDownloadIcon(); - this.isExporting = false; - this.mouseLeaveSkip = true; - }, - attachMouseEventListeners: function attachMouseEventListeners(element) { - element.addEventListener('mouseenter', this.mouseEnterHandler); - element.addEventListener('mouseleave', this.mouseLeaveHandler); - }, - detachMouseEventListeners: function detachMouseEventListeners(element) { - element.removeEventListener('mouseenter', this.mouseEnterHandler); - element.removeEventListener('mouseleave', this.mouseLeaveHandler); - }, - handleMouseEnter: function handleMouseEnter() { - this.renderCancelIcon(); - }, - handleMouseLeave: function handleMouseLeave() { - if (!this.mouseLeaveSkip) { - this.renderExportIcon(); - } else { - this.mouseLeaveSkip = false; - } - }, - renderDownloadIcon: function renderDownloadIcon() { - 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 renderExportIcon() { - L.IconUtil.toggleXlink(this._link, 'spinner'); - L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...'); - L.IconUtil.addClassToSvg(this._link, 'loader'); - }, - renderCancelIcon: function renderCancelIcon() { - L.IconUtil.toggleXlink(this._link, 'cancel'); - L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...'); - L.DomUtil.removeClass(this._link.firstChild, 'loader'); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/FreeRotateAction.js": -/*!**********************************************!*\ - !*** ./src/edit/actions/FreeRotateAction.js ***! - \**********************************************/ -/***/ (function() { - -L.FreeRotateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'crop_rotate', - tooltip: overlay.options.translation.freeRotateImage, - className: 'freeRotate' - }; - L.DistortableImage.action_map.f = '_freeRotateMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._freeRotateMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/GeolocateAction.js": -/*!*********************************************!*\ - !*** ./src/edit/actions/GeolocateAction.js ***! - \*********************************************/ -/***/ (function() { - -L.GeolocateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'explore', - tooltip: overlay.options.translation.geolocateImage, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var image = this._overlay.getElement(); - - EXIF.getData(image, L.EXIF(image)); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/LockAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/LockAction.js ***! - \****************************************/ -/***/ (function() { - -L.LockAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use; - var tooltip; - - if (edit instanceof L.DistortableImage.Edit) { - L.DistortableImage.action_map.u = '_unlock'; - L.DistortableImage.action_map.l = '_lock'; - tooltip = overlay.options.translation.lockMode; - use = edit.isMode('lock') ? 'lock' : 'unlock'; - } else { - L.DistortableImage.group_action_map.l = '_lockGroup'; - tooltip = overlay.options.translation.lockImages; - use = 'lock'; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: 'lock' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - if (edit instanceof L.DistortableImage.Edit) { - edit._toggleLockMode(); - } else { - edit._lockGroup(); - } - } -}); - -/***/ }), - -/***/ "./src/edit/actions/OpacityAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/OpacityAction.js ***! - \*******************************************/ -/***/ (function() { - -L.OpacityAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var mode = edit._mode; - var use; - var tooltip; - - if (edit._transparent) { - use = 'opacity_empty'; - tooltip = overlay.options.translation.makeImageOpaque; - } else { - use = 'opacity'; - tooltip = overlay.options.translation.makeImageTransparent; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: mode === 'lock' ? 'disabled' : '' - }; - L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - var link = this._link; - L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty'); - L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); - - edit._toggleOpacity(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/RestoreAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/RestoreAction.js ***! - \*******************************************/ -/***/ (function() { - -L.RestoreAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var mode = L.Utils.getNestedVal(overlay, 'editing', '_mode'); - var edited = overlay.edited; - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'restore', - tooltip: overlay.options.translation.restoreImage, - className: edited && mode !== 'lock' ? '' : 'disabled' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var ov = this._overlay; - L.DomEvent.on(ov, { - edit: this._enableAction, - restore: this._disableAction - }, this); - ov.restore(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/RotateAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/RotateAction.js ***! - \******************************************/ -/***/ (function() { - -L.RotateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'rotate', - tooltip: overlay.options.translation.rotateImage, - className: 'rotate' - }; - L.DistortableImage.action_map.r = '_rotateMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._rotateMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/ScaleAction.js": -/*!*****************************************!*\ - !*** ./src/edit/actions/ScaleAction.js ***! - \*****************************************/ -/***/ (function() { - -L.ScaleAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'scale', - tooltip: overlay.options.translation.scaleImage, - className: 'scale' - }; - L.DistortableImage.action_map.s = '_scaleMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._scaleMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/StackAction.js": -/*!*****************************************!*\ - !*** ./src/edit/actions/StackAction.js ***! - \*****************************************/ -/***/ (function() { - -L.StackAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use; - var tooltip; - - if (edit._toggledImage) { - use = 'flip_to_back'; - tooltip = overlay.options.translation.stackToFront; - } else { - use = 'flip_to_front'; - tooltip = overlay.options.translation.stackToBack; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp'; - L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back'); - L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back'); - - edit._toggleOrder(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/UnlockAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/UnlockAction.js ***! - \******************************************/ -/***/ (function() { - -L.UnlockAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'unlock', - tooltip: overlay.options.translation.unlockImages - }; - L.DistortableImage.group_action_map.u = '_unlockGroup'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._unlockGroup(); - } -}); - -/***/ }), - -/***/ "./src/edit/getEXIFdata.js": -/*!*********************************!*\ - !*** ./src/edit/getEXIFdata.js ***! - \*********************************/ -/***/ (function() { - -/* eslint-disable no-unused-vars */ -L.EXIF = function getEXIFdata(img) { - if (Object.keys(EXIF.getAllTags(img)).length !== 0) { - console.log(EXIF.getAllTags(img)); - var GPS = EXIF.getAllTags(img); - var altitude; - /* If the lat/lng is available. */ - - if (typeof GPS.GPSLatitude !== 'undefined' && typeof GPS.GPSLongitude !== 'undefined') { - // sadly, encoded in [degrees,minutes,seconds] - // primitive value = GPS.GPSLatitude[x].numerator - var lat = GPS.GPSLatitude[0] + GPS.GPSLatitude[1] / 60 + GPS.GPSLatitude[2] / 3600; - var lng = GPS.GPSLongitude[0] + GPS.GPSLongitude[1] / 60 + GPS.GPSLongitude[2] / 3600; - - if (GPS.GPSLatitudeRef !== 'N') { - lat = lat * -1; - } - - if (GPS.GPSLongitudeRef === 'W') { - lng = lng * -1; - } - } // Attempt to use GPS compass heading; will require - // some trig to calc corner points, which you can find below: - - - var angle = 0; // "T" refers to "True north", so -90. - - if (GPS.GPSImgDirectionRef === 'T') { - angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); // "M" refers to "Magnetic north" - } else if (GPS.GPSImgDirectionRef === 'M') { - angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); - } else { - console.log('No compass data found'); - } - - console.log('Orientation:', GPS.Orientation); - /* If there is orientation data -- i.e. landscape/portrait etc */ - - if (GPS.Orientation === 6) { - // CCW - angle += Math.PI / 180 * -90; - } else if (GPS.Orientation === 8) { - // CW - angle += Math.PI / 180 * 90; - } else if (GPS.Orientation === 3) { - // 180 - angle += Math.PI / 180 * 180; - } - /* If there is altitude data */ - - - if (typeof GPS.GPSAltitude !== 'undefined' && typeof GPS.GPSAltitudeRef !== 'undefined') { - // Attempt to use GPS altitude: - // (may eventually need to find EXIF field of view for correction) - if (typeof GPS.GPSAltitude !== 'undefined' && typeof GPS.GPSAltitudeRef !== 'undefined') { - altitude = GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator + GPS.GPSAltitudeRef; - } else { - altitude = 0; // none - } - } - } else { - alert('EXIF initialized. Press again to view data in console.'); - } -}; - -/***/ }), - -/***/ "./src/edit/handles/DistortHandle.js": -/*!*******************************************!*\ - !*** ./src/edit/handles/DistortHandle.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortHandle = L.EditHandle.extend({ - options: { - TYPE: 'distort', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - overlay.setCorner(this._corner, this.getLatLng()); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.distortHandle = function (overlay, idx, options) { - return new L.DistortHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/DragHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/DragHandle.js ***! - \****************************************/ -/***/ (function() { - -L.DragHandle = L.EditHandle.extend({ - options: { - TYPE: 'drag', - icon: L.icon({ - // eslint-disable-next-line max-len - 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=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - overlay.dragBy(formerLatLng, newLatLng); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.dragHandle = function (overlay, idx, options) { - return new L.DragHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/EditHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/EditHandle.js ***! - \****************************************/ -/***/ (function() { - -L.EditHandle = L.Marker.extend({ - initialize: function initialize(overlay, corner, options) { - var latlng = overlay.getCorner(corner); - L.setOptions(this, options); - this._handled = overlay; - this._corner = corner; - var markerOptions = { - draggable: true, - zIndexOffset: 10 - }; - - if (options && options.hasOwnProperty('draggable')) { - markerOptions.draggable = options.draggable; - } - - L.Marker.prototype.initialize.call(this, latlng, markerOptions); - }, - onAdd: function onAdd(map) { - L.Marker.prototype.onAdd.call(this, map); - - this._bindListeners(); - - this.updateHandle(); - }, - onRemove: function onRemove(map) { - this._unbindListeners(); - - L.Marker.prototype.onRemove.call(this, map); - }, - _onHandleDragStart: function _onHandleDragStart() { - this._handled.fire('editstart'); - }, - _onHandleDragEnd: function _onHandleDragEnd() { - this._fireEdit(); - }, - _fireEdit: function _fireEdit() { - this._handled.edited = true; - - this._handled.fire('edit'); - }, - _bindListeners: function _bindListeners() { - this.on({ - contextmenu: L.DomEvent.stop, - dragstart: this._onHandleDragStart, - drag: this._onHandleDrag, - dragend: this._onHandleDragEnd - }, this); - - this._handled._map.on('zoomend', this.updateHandle, this); - - this._handled.on('update', this.updateHandle, this); - }, - _unbindListeners: function _unbindListeners() { - this.off({ - contextmenu: L.DomEvent.stop, - dragstart: this._onHandleDragStart, - drag: this._onHandleDrag, - dragend: this._onHandleDragEnd - }, this); - - this._handled._map.off('zoomend', this.updateHandle, this); - - this._handled.off('update', this.updateHandle, this); - }, - - /* Takes two latlngs and calculates the scaling difference. */ - _calculateScalingFactor: function _calculateScalingFactor(latlngA, latlngB) { - var overlay = this._handled; - var map = overlay._map; - var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); - var formerPoint = map.latLngToLayerPoint(latlngA); - var newPoint = map.latLngToLayerPoint(latlngB); - - var formerRadiusSquared = this._d2(centerPoint, formerPoint); - - var newRadiusSquared = this._d2(centerPoint, newPoint); - - return Math.sqrt(newRadiusSquared / formerRadiusSquared); - }, - - /* Distance between two points in cartesian space, squared (distance formula). */ - _d2: function _d2(a, b) { - var dx = a.x - b.x; - var dy = a.y - b.y; - return Math.pow(dx, 2) + Math.pow(dy, 2); - }, - - /* Takes two latlngs and calculates the angle between them. */ - calculateAngleDelta: function calculateAngleDelta(latlngA, latlngB) { - var overlay = this._handled; - var map = overlay._map; - var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); - var formerPoint = map.latLngToLayerPoint(latlngA); - var newPoint = map.latLngToLayerPoint(latlngB); - var initialAngle = Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x); - var newAngle = Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x); - return newAngle - initialAngle; - } -}); - -/***/ }), - -/***/ "./src/edit/handles/FreeRotateHandle.js": -/*!**********************************************!*\ - !*** ./src/edit/handles/FreeRotateHandle.js ***! - \**********************************************/ -/***/ (function() { - -L.FreeRotateHandle = L.EditHandle.extend({ - options: { - TYPE: 'freeRotate', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - '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 _onHandleDrag() { - var overlay = this._handled; - var map = overlay._map; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - var angle = this.calculateAngleDelta(formerLatLng, newLatLng); - - var scale = this._calculateScalingFactor(formerLatLng, newLatLng); - - if (angle !== 0) { - overlay.rotateBy(angle, 'rad'); - } - - var edgeMinWidth = overlay.edgeMinWidth; - - if (!edgeMinWidth) { - edgeMinWidth = 50; - } - /* just in case */ - - - var corner1 = map.latLngToContainerPoint(overlay.getCorner(0)); - var corner2 = map.latLngToContainerPoint(overlay.getCorner(1)); - var w = Math.abs(corner1.x - corner2.x); - var h = Math.abs(corner1.y - corner2.y); - var distance = Math.sqrt(w * w + h * h); - - if (distance > edgeMinWidth || scale > 1) { - overlay.scaleBy(scale); - } else { - overlay.scaleBy(1); - } - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.freeRotateHandle = function (overlay, idx, options) { - return new L.FreeRotateHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/LockHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/LockHandle.js ***! - \****************************************/ -/***/ (function() { - -L.LockHandle = L.EditHandle.extend({ - options: { - TYPE: 'lock', - interactive: false, - icon: L.icon({ - // eslint-disable-next-line max-len - iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - onRemove: function onRemove(map) { - this.unbindTooltip(); - L.EditHandle.prototype.onRemove.call(this, map); - }, - _bindListeners: function _bindListeners() { - var icon = this.getElement(); - - L.EditHandle.prototype._bindListeners.call(this); - - L.DomEvent.on(icon, { - mousedown: this._tooltipOn, - mouseup: this._tooltipOff - }, this); - L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this); - }, - _unbindListeners: function _unbindListeners() { - var icon = this.getElement(); - - L.EditHandle.prototype._bindListeners.call(this); - - L.DomEvent.off(icon, { - mousedown: this._tooltipOn, - mouseup: this._tooltipOff - }, this); - L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this); - }, - - /* cannot be dragged */ - _onHandleDrag: function _onHandleDrag() {}, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - }, - _tooltipOn: function _tooltipOn(e) { - var eP = this._handled.parentGroup; - var edit = eP ? eP.editing : this._handled.editing; - - if (e.shiftKey) { - return; - } - - if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { - return; - } - - var handlesArr = edit._lockHandles; - this._timer = setTimeout(L.bind(function () { - if (this._timeout) { - clearTimeout(this._timeout); - } - - if (!this.getTooltip()) { - this.bindTooltip('Locked!', { - permanent: true - }); - } else { - handlesArr.eachLayer(function (handle) { - if (this !== handle) { - handle.closeTooltip(); - } - }); - } - - this.openTooltip(); - }, this), 500); - }, - _tooltipOff: function _tooltipOff(e) { - var eP = this._handled.parentGroup; - var edit = eP ? eP.editing : this._handled.editing; - - if (e.shiftKey) { - return; - } - - if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { - return; - } - - var handlesArr = edit._lockHandles; - - if (e.currentTarget === document) { - handlesArr.eachLayer(function (handle) { - handle.closeTooltip(); - }); - } - - if (this._timer) { - clearTimeout(this._timer); - } - - this._timeout = setTimeout(L.bind(function () { - this.closeTooltip(); - }, this), 400); - } -}); - -L.lockHandle = function (overlay, idx, options) { - return new L.LockHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/RotateHandle.js": -/*!******************************************!*\ - !*** ./src/edit/handles/RotateHandle.js ***! - \******************************************/ -/***/ (function() { - -L.RotateHandle = L.EditHandle.extend({ - options: { - TYPE: 'rotate', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - '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 _onHandleDrag() { - var overlay = this._handled; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - var angle = this.calculateAngleDelta(formerLatLng, newLatLng); - /* - * running rotation logic even for an angle delta of 0 - * prevents a small, occasional marker flicker - */ - - overlay.rotateBy(angle, 'rad'); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.rotateHandle = function (overlay, idx, options) { - return new L.RotateHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/ScaleHandle.js": -/*!*****************************************!*\ - !*** ./src/edit/handles/ScaleHandle.js ***! - \*****************************************/ -/***/ (function() { - -L.ScaleHandle = L.EditHandle.extend({ - options: { - TYPE: 'scale', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - var map = overlay._map; - var edgeMinWidth = overlay.edgeMinWidth; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - - var scale = this._calculateScalingFactor(formerLatLng, newLatLng); - /* - * checks whether the "edgeMinWidth" property is set and tracks the minimum edge length; - * this enables preventing scaling to zero, but we might also add an overall scale limit - */ - - - if (!edgeMinWidth) { - edgeMinWidth = 50; - } - /* just in case */ - - - var corner1 = map.latLngToLayerPoint(overlay.getCorner(0)); - var corner2 = map.latLngToLayerPoint(overlay.getCorner(1)); - var w = Math.abs(corner1.x - corner2.x); - var h = Math.abs(corner1.y - corner2.y); - var distance = Math.sqrt(w * w + h * h); - - if (distance > edgeMinWidth || scale > 1) { - overlay.scaleBy(scale); - /* - * running scale logic even for a scale ratio of 1 - * prevents a small, occasional marker flicker - */ - } else { - overlay.scaleBy(1); - } - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.scaleHandle = function (overlay, idx, options) { - return new L.ScaleHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/toolbars/DistortableImage.ControlBar.js": -/*!**********************************************************!*\ - !*** ./src/edit/toolbars/DistortableImage.ControlBar.js ***! - \**********************************************************/ -/***/ (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 (options) { - return new L.DistortableImage.ControlBar(options); -}; -/** addInitHooks run before onAdd */ - - -L.DistortableCollection.addInitHook(function () { - /** Default actions */ - this.ACTIONS = [L.ExportAction, L.DeleteAction, L.LockAction, L.UnlockAction]; // all possible modes - - L.DistortableCollection.Edit.MODES = { - lock: L.LockAction, - unlock: L.UnlockAction - }; - var a = this.options.actions ? this.options.actions : this.ACTIONS; - this.editing = L.distortableCollection.edit(this, { - actions: a - }); -}); - -/***/ }), - -/***/ "./src/edit/toolbars/DistortableImage.PopupBar.js": -/*!********************************************************!*\ - !*** ./src/edit/toolbars/DistortableImage.PopupBar.js ***! - \********************************************************/ -/***/ (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 initialize(latlng, options) { - L.setOptions(this, options); - L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options); - }, - addHooks: function addHooks(map, ov) { - this.map = map; - this.ov = ov; - }, - tools: function tools() { - if (this._ul) { - return this._ul.children; - } - }, - clickTool: function clickTool(name) { - var tools = this.tools(); - - for (var i = 0; i < tools.length; i++) { - var tool = tools.item(i).children[0]; - - if (L.DomUtil.hasClass(tool, name)) { - tool.click(); - return tool; - } - } - - return false; - } -}); - -L.distortableImage.popupBar = function (latlng, options) { - return new L.DistortableImage.PopupBar(latlng, options); -}; - -L.DistortableImageOverlay.addInitHook(function () { - /** Default actions */ - this.ACTIONS = [L.DragAction, L.ScaleAction, L.DistortAction, L.RotateAction, L.FreeRotateAction, L.LockAction, L.OpacityAction, L.BorderAction, L.ExportAction, L.DeleteAction]; // all possible modes - - L.DistortableImage.Edit.MODES = { - drag: L.DragAction, - scale: L.ScaleAction, - distort: L.DistortAction, - rotate: L.RotateAction, - freeRotate: L.FreeRotateAction, - lock: L.LockAction - }; - var a = this.options.actions ? this.options.actions : this.ACTIONS; - this.editing = L.distortableImage.edit(this, { - actions: a - }); -}); - -/***/ }), - -/***/ "./src/iconsets/IconSet.js": -/*!*********************************!*\ - !*** ./src/iconsets/IconSet.js ***! - \*********************************/ -/***/ (function() { - -/* this is the baseclass other IconSets inherit from, -* we don't use it directly */ -L.IconSet = L.Class.extend({ - _svg: '', - _symbols: '', - render: function render() { - this.addSymbols(this._symbols); - return this._svg; - }, - addSymbols: function addSymbols(symbols) { - this._svg += symbols; - } -}); - -/***/ }), - -/***/ "./src/iconsets/KeymapperIconSet.js": -/*!******************************************!*\ - !*** ./src/iconsets/KeymapperIconSet.js ***! - \******************************************/ -/***/ (function() { - -L.KeymapperIconSet = L.IconSet.extend({ - _symbols: // eslint-disable-next-line max-len - '' -}); - -/***/ }), - -/***/ "./src/iconsets/ToolbarIconSet.js": -/*!****************************************!*\ - !*** ./src/iconsets/ToolbarIconSet.js ***! - \****************************************/ -/***/ (function() { - -/* eslint-disable max-len */ -L.ToolbarIconSet = L.IconSet.extend({ - _symbols: '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' -}); - -/***/ }), - -/***/ "./src/mapmixins/BoxCollector.js": -/*!***************************************!*\ - !*** ./src/mapmixins/BoxCollector.js ***! - \***************************************/ -/***/ (function() { - -L.Map.mergeOptions({ - boxCollector: true, - boxZoom: false -}); -/** - * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with - * our `L.DistortableCollection` class instead of a zoom box. - * */ - -L.Map.BoxCollector = L.Map.BoxZoom.extend({ - initialize: function initialize(map) { - this._map = map; - this._container = map._container; - this._pane = map._panes.overlayPane; - this._resetStateTimeout = 0; - map.on('unload', this._destroy, this); - }, - addHooks: function addHooks() { - L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this); - }, - removeHooks: function removeHooks() { - L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this); - }, - moved: function moved() { - return this._moved; - }, - _destroy: function _destroy() { - L.DomUtil.remove(this._pane); - delete this._pane; - }, - _resetState: function _resetState() { - this._resetStateTimeout = 0; - this._moved = false; - }, - _clearDeferredResetState: function _clearDeferredResetState() { - if (this._resetStateTimeout !== 0) { - clearTimeout(this._resetStateTimeout); - this._resetStateTimeout = 0; - } - }, - _onMouseDown: function _onMouseDown(e) { - if (!e.shiftKey || e.which !== 1 && e.button !== 1) { - return false; - } // Clear the deferred resetState if it hasn't executed yet, otherwise it - // will interrupt the interaction and orphan a box element in the container. - - - this._clearDeferredResetState(); - - this._resetState(); - - L.DomUtil.disableTextSelection(); - L.DomUtil.disableImageDrag(); - this._startPoint = this._map.mouseEventToContainerPoint(e); - L.DomEvent.on(document, { - contextmenu: L.DomEvent.stop, - mousemove: this._onMouseMove, - mouseup: this._onMouseUp - }, this); - }, - _onMouseMove: function _onMouseMove(e) { - if (!this._moved) { - this._moved = true; - 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(e); - this._bounds = L.bounds(this._startPoint, this._point); - - var size = this._bounds.getSize(); - - L.DomUtil.setPosition(this._box, this._bounds.min); - this._box.style.width = size.x + 'px'; - this._box.style.height = size.y + 'px'; - }, - _finish: function _finish() { - if (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 _onMouseUp(e) { - if (e.which !== 1 && e.button !== 1) { - return; - } - - this._finish(); - - if (!this._moved) { - return; - } // Postpone to next JS tick so internal click event handling - // still see it as "moved". - - - this._clearDeferredResetState(); - - this._resetStateTimeout = setTimeout(L.Util.bind(this._resetState, this), 0); - var bounds = L.latLngBounds(this._map.containerPointToLatLng(this._bounds.getBottomLeft()), this._map.containerPointToLatLng(this._bounds.getTopRight())); - - var zoom = this._map.getZoom(); - - var center = this._map.getCenter(); // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344 - - - bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center); - - this._map.fire('boxcollectend', { - boxCollectBounds: bounds - }); - } -}); -L.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector); - -/***/ }), - -/***/ "./src/mapmixins/DoubleClickLabels.js": -/*!********************************************!*\ - !*** ./src/mapmixins/DoubleClickLabels.js ***! - \********************************************/ -/***/ (function() { - -L.Map.mergeOptions({ - doubleClickLabels: true -}); -/** - * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant` - * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it. - */ - -L.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({ - enable: function enable() { - var map = this._map; - - if (this._enabled) { - return this; - } // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled. - - - if (map.doubleClickZoom.enabled()) { - map.doubleClickZoom.disable(); - } - - this._map.fire('singleclickon'); - - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - if (!this._enabled) { - return this; - } - - this._enabled = false; - this.removeHooks(); - return this; - }, - _fireIfSingle: function _fireIfSingle(e) { - var map = this._map; - var oe = e.originalEvent; // prevents deselection in case of box selector - - if (oe && oe.shiftKey) { - return; - } - - map._clicked += 1; - this._map._clickTimeout = setTimeout(function () { - if (map._clicked === 1) { - map._clicked = 0; - map.fire('singleclick', { - type: 'singleclick' - }); - } else { - // manually fire doubleclick event only for touch screens that don't natively fire it - if (L.Browser.touch && oe && oe.sourceCapabilities.firesTouchEvents) { - map.fire('dblclick'); - } - } - }, 250); - }, - _onDoubleClick: function _onDoubleClick() { - var map = this._map; - var labels = map._labels; - setTimeout(function () { - map._clicked = 0; - clearTimeout(map._clickTimeout); - }, 0); - - if (!labels) { - return; - } - - if (labels.options.opacity === 1) { - labels.options.opacity = 0; - labels.setOpacity(0); - } else { - labels.options.opacity = 1; - labels.setOpacity(1); - } - } -}); -L.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels); - -/***/ }), - -/***/ "./src/mapmixins/DoubleClickZoom.js": -/*!******************************************!*\ - !*** ./src/mapmixins/DoubleClickZoom.js ***! - \******************************************/ -/***/ (function() { - -/** - * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it - * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`. - * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler - */ -L.Map.DoubleClickZoom.include({ - addHooks: function addHooks() { - this._map.on({ - click: this._fireIfSingle, - dblclick: this._onDoubleClick - }, this); - }, - removeHooks: function removeHooks() { - this._map.off({ - click: this._fireIfSingle, - dblclick: this._onDoubleClick - }, this); - }, - enable: function enable() { - if (this._enabled) { - return this; - } // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first - - - if (this._map.doubleClickLabels) { - if (this._map.doubleClickLabels.enabled()) { - return this; - } - } // signify to collection/instance classes to turn on 'singleclick' listeners - - - this._map.fire('singleclickon'); - - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - if (!this._enabled) { - return this; - } // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners. - - - this._map.fire('singleclickoff'); - - this._enabled = false; - this.removeHooks(); - return this; - }, - _fireIfSingle: function _fireIfSingle(e) { - var map = this._map; - var oe = e.originalEvent; // prevents deselection in case of box selector - - if (oe && oe.shiftKey) { - return; - } - - map._clicked += 1; - this._map._clickTimeout = setTimeout(function () { - if (map._clicked === 1) { - map._clicked = 0; - map.fire('singleclick', { - type: 'singleclick' - }); - } else { - // manually fire doubleclick event only for touch screens that don't natively fire it - if (L.Browser.touch && oe && oe.sourceCapabilities.firesTouchEvents) { - // in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the - // passed "e" (for now). To generate a 'real' DOM event that will have all of its corresponding core - // properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) - map._fireDOMEvent(oe, 'dblclick', [map]); - } - } - }, 250); - }, - _onDoubleClick: function _onDoubleClick(e) { - var map = this._map; - var oe = e.originalEvent; - setTimeout(function () { - map._clicked = 0; - clearTimeout(map._clickTimeout); - }, 0); - - if (!oe) { - return false; - } - - var oldZoom = map.getZoom(); - var delta = map.options.zoomDelta; - var zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta; - - if (map.options.doubleClickZoom === 'center') { - map.setZoom(zoom); - } else { - map.setZoomAround(e.containerPoint, zoom); - } - } -}); - -/***/ }), - -/***/ "./src/mapmixins/MapMixins.js": -/*!************************************!*\ - !*** ./src/mapmixins/MapMixins.js ***! - \************************************/ -/***/ (function() { - -/* eslint-disable max-len */ -L.Map.include({ - _clicked: 0, - addGoogleMutant: function addGoogleMutant(opts) { - var url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}'; - opts = this.mutantOptions = L.extend({ - mutantOpacity: 0.8, - maxZoom: 24, - maxNativeZoom: 20, - minZoom: 0, - labels: true, - labelOpacity: 1, - doubleClickLabels: true - }, opts); - - if (!opts.labels) { - this.mutantOptions = L.extend(this.mutantOptions, { - labelOpacity: opts.labels ? 1 : undefined, - doubleClickLabels: opts.labels ? true : undefined - }); - } - - this._googleMutant = L.tileLayer(url, { - maxZoom: opts.maxZoom, - maxNativeZoom: opts.maxNativeZoom, - minZoom: opts.minZoom, - opacity: opts.mutantOpacity - }).addTo(this); - - if (opts.labels) { - this._addLabels(opts); - } // shouldn't have this handler at all if there are no labels to toggle - else { - this.doubleClickLabels = undefined; - } - - return this; - }, - _addLabels: function _addLabels(opts) { - var url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}'; - - if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) { - opts.labelOpacity = 1; - } - - this._labels = L.tileLayer(url, { - attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors', - subdomains: 'abcd', - interactive: false, - opacity: opts.labelOpacity, - maxZoom: opts.maxZoom, - maxNativeZoom: opts.maxNativeZoom, - minZoom: opts.minZoom, - ext: 'png' - }).addTo(this); - - if (this.mutantOptions.doubleClickLabels) { - this.doubleClickLabels.enable(); - } - - return this; - } -}); // start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead -// during initialization - -L.Map.addInitHook(function () { - this.doubleClickLabels.disable(); - this.doubleClickZoom.enable(); -}); - -/***/ }), - -/***/ "./src/util/DomUtil.js": -/*!*****************************!*\ - !*** ./src/util/DomUtil.js ***! - \*****************************/ -/***/ (function() { - -L.DomUtil = L.extend(L.DomUtil, { - initTranslation: function initTranslation(obj) { - this.translation = obj; - }, - getMatrixString: function getMatrixString(m) { - var is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d; - /* - * Since matrix3d takes a 4*4 matrix, we add in an empty row and column, - * which act as the identity on the z-axis. - * See: - * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ - * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry - */ - - var matrix = [m[0], m[3], 0, m[6], m[1], m[4], 0, m[7], 0, 0, 1, 0, m[2], m[5], 0, m[8]]; - var str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : ''; - - if (!is3d) { - console.log('Your browser must support 3D CSS transforms' + 'in order to use DistortableImageOverlay.'); - } - - return str; - }, - toggleClass: function toggleClass(el, className) { - var c = className; - return this.hasClass(el, c) ? this.removeClass(el, c) : this.addClass(el, c); - }, - confirmDelete: function confirmDelete() { - return window.confirm(this.translation.confirmImageDelete); - }, - confirmDeletes: function confirmDeletes(n) { - if (n === 1) { - return this.confirmDelete(); - } - - var translation = this.translation.confirmImagesDeletes; - var warningMsg = ''; - - if (typeof translation === 'function') { - warningMsg = translation(n); - } else { - warningMsg = translation; - } - - return window.confirm(warningMsg); - } -}); - -/***/ }), - -/***/ "./src/util/IconUtil.js": -/*!******************************!*\ - !*** ./src/util/IconUtil.js ***! - \******************************/ -/***/ (function() { - -L.IconUtil = { - /* creates an svg elemenet with built in accessibility properties - * and standardized classes for styling, takes in the fragment - * identifier (id) of the symbol to reference. note for symplicity - * we allow providing the icon target with or without the '#' prefix - */ - create: function create(ref) { - if (/^#/.test(ref)) { - ref = ref.replace(/^#/, ''); - } - - return '' + '' + ''; - }, - addClassToSvg: function addClassToSvg(container, loader) { - var svg = container.querySelector('svg'); - - if (svg) { - L.DomUtil.addClass(svg, loader); - } - }, - // finds the use element and toggles its icon reference - toggleXlink: function toggleXlink(container, ref1, ref2) { - if (!/^#/.test(ref1)) { - ref1 = '#' + ref1; - } - - if (!/^#/.test(ref2)) { - ref2 = '#' + ref2; - } - - var use = container.querySelector('use'); - - if (use) { - var toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1; - use.setAttribute('xlink:href', toggled); - return toggled; - } - - return false; - }, - toggleTitle: function toggleTitle(container, title1, title2) { - var toggled = container.getAttribute('title') === title1 ? title2 : title1; - container.setAttribute('title', toggled); - - if (container.hasAttribute('aria-label')) { - container.setAttribute('aria-label', toggled); - } - - return toggled; - } -}; - -/***/ }), - -/***/ "./src/util/ImageUtil.js": -/*!*******************************!*\ - !*** ./src/util/ImageUtil.js ***! - \*******************************/ -/***/ (function() { - -L.ImageUtil = { - getCmPerPixel: function getCmPerPixel(overlay) { - var map = overlay._map; - var dist = map.latLngToLayerPoint(overlay.getCorner(0)).distanceTo(map.latLngToLayerPoint(overlay.getCorner(1))); - return dist * 100 / overlay.getElement().width; - } -}; - -/***/ }), - -/***/ "./src/util/MatrixUtil.js": -/*!********************************!*\ - !*** ./src/util/MatrixUtil.js ***! - \********************************/ -/***/ (function() { - -L.MatrixUtil = { - // Compute the adjugate of m - adj: function adj(m) { - return [m[4] * m[8] - m[5] * m[7], m[2] * m[7] - m[1] * m[8], m[1] * m[5] - m[2] * m[4], m[5] * m[6] - m[3] * m[8], m[0] * m[8] - m[2] * m[6], m[2] * m[3] - m[0] * m[5], m[3] * m[7] - m[4] * m[6], m[1] * m[6] - m[0] * m[7], m[0] * m[4] - m[1] * m[3]]; - }, - // multiply two 3*3 matrices - multmm: function multmm(a, b) { - var c = []; - var i; - - for (i = 0; i < 3; i++) { - for (var j = 0; j < 3; j++) { - var cij = 0; - - for (var k = 0; k < 3; k++) { - cij += a[3 * i + k] * b[3 * k + j]; - } - - c[3 * i + j] = cij; - } - } - - return c; - }, - // multiply a 3*3 matrix and a 3-vector - multmv: function multmv(m, v) { - return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; - }, - // multiply a scalar and a 3*3 matrix - multsm: function multsm(s, m) { - var matrix = []; - - for (var i = 0, l = m.length; i < l; i++) { - matrix.push(s * m[i]); - } - - return matrix; - }, - basisToPoints: function basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) { - var m = [x1, x2, x3, y1, y2, y3, 1, 1, 1]; - var v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]); - return L.MatrixUtil.multmm(m, [v[0], 0, 0, 0, v[1], 0, 0, 0, v[2]]); - }, - project: function project(m, x, y) { - var v = L.MatrixUtil.multmv(m, [x, y, 1]); - return [v[0] / v[2], v[1] / v[2]]; - }, - general2DProjection: function general2DProjection(x1s, y1s, x1d, y1d, x2s, y2s, x2d, y2d, x3s, y3s, x3d, y3d, x4s, y4s, x4d, y4d) { - var s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s); - var d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d); - var m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s)); // Normalize to the unique matrix with m[8] == 1. - // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ - - return L.MatrixUtil.multsm(1 / m[8], m); - } -}; - -/***/ }), - -/***/ "./src/util/TrigUtil.js": -/*!******************************!*\ - !*** ./src/util/TrigUtil.js ***! - \******************************/ -/***/ (function() { - -L.TrigUtil = { - calcAngle: function calcAngle(x, y) { - var unit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'deg'; - return unit === 'deg' ? this.radiansToDegrees(Math.atan2(y, x)) : Math.atan2(y, x); - }, - radiansToDegrees: function radiansToDegrees(angle) { - return angle * 180 / Math.PI; - }, - degreesToRadians: function degreesToRadians(angle) { - return angle * Math.PI / 180; - } -}; - -/***/ }), - -/***/ "./src/util/Utils.js": -/*!***************************!*\ - !*** ./src/util/Utils.js ***! - \***************************/ -/***/ (function() { - -L.Utils = { - initTranslation: function initTranslation() { - var translation = { - 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) { - this.options.translation = translation; - } else { - // If the translation for a word is not specified, fallback to English. - for (var key in translation) { - if (!this.options.translation.hasOwnProperty(key)) { - this.options.translation[key] = translation[key]; - } - } - } - - L.DomUtil.initTranslation(this.options.translation); - }, - getNestedVal: function getNestedVal(obj, key, nestedKey) { - var dig = [key, nestedKey]; - return dig.reduce(function (obj, k) { - return obj && obj[k]; - }, obj); - } -}; - -/***/ }), - -/***/ "./node_modules/events/events.js": -/*!***************************************!*\ - !*** ./node_modules/events/events.js ***! - \***************************************/ -/***/ (function(module) { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -var R = typeof Reflect === 'object' ? Reflect : null -var ReflectApply = R && typeof R.apply === 'function' - ? R.apply - : function ReflectApply(target, receiver, args) { - return Function.prototype.apply.call(target, receiver, args); - } - -var ReflectOwnKeys -if (R && typeof R.ownKeys === 'function') { - ReflectOwnKeys = R.ownKeys -} else if (Object.getOwnPropertySymbols) { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target) - .concat(Object.getOwnPropertySymbols(target)); - }; -} else { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target); - }; -} - -function ProcessEmitWarning(warning) { - if (console && console.warn) console.warn(warning); -} - -var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { - return value !== value; -} - -function EventEmitter() { - EventEmitter.init.call(this); -} -module.exports = EventEmitter; -module.exports.once = once; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._eventsCount = 0; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -var defaultMaxListeners = 10; - -function checkListener(listener) { - if (typeof listener !== 'function') { - throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); - } -} - -Object.defineProperty(EventEmitter, 'defaultMaxListeners', { - enumerable: true, - get: function() { - return defaultMaxListeners; - }, - set: function(arg) { - if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { - throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); - } - defaultMaxListeners = arg; - } -}); - -EventEmitter.init = function() { - - if (this._events === undefined || - this._events === Object.getPrototypeOf(this)._events) { - this._events = Object.create(null); - this._eventsCount = 0; - } - - this._maxListeners = this._maxListeners || undefined; -}; - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { - if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { - throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); - } - this._maxListeners = n; - return this; -}; - -function _getMaxListeners(that) { - if (that._maxListeners === undefined) - return EventEmitter.defaultMaxListeners; - return that._maxListeners; -} - -EventEmitter.prototype.getMaxListeners = function getMaxListeners() { - return _getMaxListeners(this); -}; - -EventEmitter.prototype.emit = function emit(type) { - var args = []; - for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); - var doError = (type === 'error'); - - var events = this._events; - if (events !== undefined) - doError = (doError && events.error === undefined); - else if (!doError) - return false; - - // If there is no 'error' event listener then throw. - if (doError) { - var er; - if (args.length > 0) - er = args[0]; - if (er instanceof Error) { - // Note: The comments on the `throw` lines are intentional, they show - // up in Node's output if this results in an unhandled exception. - throw er; // Unhandled 'error' event - } - // At least give some kind of context to the user - var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); - err.context = er; - throw err; // Unhandled 'error' event - } - - var handler = events[type]; - - if (handler === undefined) - return false; - - if (typeof handler === 'function') { - ReflectApply(handler, this, args); - } else { - var len = handler.length; - var listeners = arrayClone(handler, len); - for (var i = 0; i < len; ++i) - ReflectApply(listeners[i], this, args); - } - - return true; -}; - -function _addListener(target, type, listener, prepend) { - var m; - var events; - var existing; - - checkListener(listener); - - events = target._events; - if (events === undefined) { - events = target._events = Object.create(null); - target._eventsCount = 0; - } else { - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (events.newListener !== undefined) { - target.emit('newListener', type, - listener.listener ? listener.listener : listener); - - // Re-assign `events` because a newListener handler could have caused the - // this._events to be assigned to a new object - events = target._events; - } - existing = events[type]; - } - - if (existing === undefined) { - // Optimize the case of one listener. Don't need the extra array object. - existing = events[type] = listener; - ++target._eventsCount; - } else { - if (typeof existing === 'function') { - // Adding the second element, need to change to array. - existing = events[type] = - prepend ? [listener, existing] : [existing, listener]; - // If we've already got an array, just append. - } else if (prepend) { - existing.unshift(listener); - } else { - existing.push(listener); - } - - // Check for listener leak - m = _getMaxListeners(target); - if (m > 0 && existing.length > m && !existing.warned) { - existing.warned = true; - // No error code for this since it is a Warning - // eslint-disable-next-line no-restricted-syntax - var w = new Error('Possible EventEmitter memory leak detected. ' + - existing.length + ' ' + String(type) + ' listeners ' + - 'added. Use emitter.setMaxListeners() to ' + - 'increase limit'); - w.name = 'MaxListenersExceededWarning'; - w.emitter = target; - w.type = type; - w.count = existing.length; - ProcessEmitWarning(w); - } - } - - return target; -} - -EventEmitter.prototype.addListener = function addListener(type, listener) { - return _addListener(this, type, listener, false); -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.prependListener = - function prependListener(type, listener) { - return _addListener(this, type, listener, true); - }; - -function onceWrapper() { - if (!this.fired) { - this.target.removeListener(this.type, this.wrapFn); - this.fired = true; - if (arguments.length === 0) - return this.listener.call(this.target); - return this.listener.apply(this.target, arguments); - } -} - -function _onceWrap(target, type, listener) { - var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; - var wrapped = onceWrapper.bind(state); - wrapped.listener = listener; - state.wrapFn = wrapped; - return wrapped; -} - -EventEmitter.prototype.once = function once(type, listener) { - checkListener(listener); - this.on(type, _onceWrap(this, type, listener)); - return this; -}; - -EventEmitter.prototype.prependOnceListener = - function prependOnceListener(type, listener) { - checkListener(listener); - this.prependListener(type, _onceWrap(this, type, listener)); - return this; - }; - -// Emits a 'removeListener' event if and only if the listener was removed. -EventEmitter.prototype.removeListener = - function removeListener(type, listener) { - var list, events, position, i, originalListener; - - checkListener(listener); - - events = this._events; - if (events === undefined) - return this; - - list = events[type]; - if (list === undefined) - return this; - - if (list === listener || list.listener === listener) { - if (--this._eventsCount === 0) - this._events = Object.create(null); - else { - delete events[type]; - if (events.removeListener) - this.emit('removeListener', type, list.listener || listener); - } - } else if (typeof list !== 'function') { - position = -1; - - for (i = list.length - 1; i >= 0; i--) { - if (list[i] === listener || list[i].listener === listener) { - originalListener = list[i].listener; - position = i; - break; - } - } - - if (position < 0) - return this; - - if (position === 0) - list.shift(); - else { - spliceOne(list, position); - } - - if (list.length === 1) - events[type] = list[0]; - - if (events.removeListener !== undefined) - this.emit('removeListener', type, originalListener || listener); - } - - return this; - }; - -EventEmitter.prototype.off = EventEmitter.prototype.removeListener; - -EventEmitter.prototype.removeAllListeners = - function removeAllListeners(type) { - var listeners, events, i; - - events = this._events; - if (events === undefined) - return this; - - // not listening for removeListener, no need to emit - if (events.removeListener === undefined) { - if (arguments.length === 0) { - this._events = Object.create(null); - this._eventsCount = 0; - } else if (events[type] !== undefined) { - if (--this._eventsCount === 0) - this._events = Object.create(null); - else - delete events[type]; - } - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - var keys = Object.keys(events); - var key; - for (i = 0; i < keys.length; ++i) { - key = keys[i]; - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = Object.create(null); - this._eventsCount = 0; - return this; - } - - listeners = events[type]; - - if (typeof listeners === 'function') { - this.removeListener(type, listeners); - } else if (listeners !== undefined) { - // LIFO order - for (i = listeners.length - 1; i >= 0; i--) { - this.removeListener(type, listeners[i]); - } - } - - return this; - }; - -function _listeners(target, type, unwrap) { - var events = target._events; - - if (events === undefined) - return []; - - var evlistener = events[type]; - if (evlistener === undefined) - return []; - - if (typeof evlistener === 'function') - return unwrap ? [evlistener.listener || evlistener] : [evlistener]; - - return unwrap ? - unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); -} - -EventEmitter.prototype.listeners = function listeners(type) { - return _listeners(this, type, true); -}; - -EventEmitter.prototype.rawListeners = function rawListeners(type) { - return _listeners(this, type, false); -}; - -EventEmitter.listenerCount = function(emitter, type) { - if (typeof emitter.listenerCount === 'function') { - return emitter.listenerCount(type); - } else { - return listenerCount.call(emitter, type); - } -}; - -EventEmitter.prototype.listenerCount = listenerCount; -function listenerCount(type) { - var events = this._events; - - if (events !== undefined) { - var evlistener = events[type]; - - if (typeof evlistener === 'function') { - return 1; - } else if (evlistener !== undefined) { - return evlistener.length; - } - } - - return 0; -} - -EventEmitter.prototype.eventNames = function eventNames() { - return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; -}; - -function arrayClone(arr, n) { - var copy = new Array(n); - for (var i = 0; i < n; ++i) - copy[i] = arr[i]; - return copy; -} - -function spliceOne(list, index) { - for (; index + 1 < list.length; index++) - list[index] = list[index + 1]; - list.pop(); -} - -function unwrapListeners(arr) { - var ret = new Array(arr.length); - for (var i = 0; i < ret.length; ++i) { - ret[i] = arr[i].listener || arr[i]; - } - return ret; -} - -function once(emitter, name) { - return new Promise(function (resolve, reject) { - function errorListener(err) { - emitter.removeListener(name, resolver); - reject(err); - } - - function resolver() { - if (typeof emitter.removeListener === 'function') { - emitter.removeListener('error', errorListener); - } - resolve([].slice.call(arguments)); - }; - - eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); - if (name !== 'error') { - addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); - } - }); -} - -function addErrorHandlerIfEventEmitter(emitter, handler, flags) { - if (typeof emitter.on === 'function') { - eventTargetAgnosticAddListener(emitter, 'error', handler, flags); - } -} - -function eventTargetAgnosticAddListener(emitter, name, listener, flags) { - if (typeof emitter.on === 'function') { - if (flags.once) { - emitter.once(name, listener); - } else { - emitter.on(name, listener); - } - } else if (typeof emitter.addEventListener === 'function') { - // EventTarget does not have `error` event semantics like Node - // EventEmitters, we do not listen for `error` events here. - emitter.addEventListener(name, function wrapListener(arg) { - // IE does not have builtin `{ once: true }` support so we - // have to do it manually. - if (flags.once) { - emitter.removeEventListener(name, wrapListener); - } - listener(arg); - }); - } else { - throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); - } -} - - -/***/ }), - -/***/ "./node_modules/html-entities/lib/index.js": -/*!*************************************************!*\ - !*** ./node_modules/html-entities/lib/index.js ***! - \*************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; - -var __assign = (this && this.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -var named_references_1 = __webpack_require__(/*! ./named-references */ "./node_modules/html-entities/lib/named-references.js"); -var numeric_unicode_map_1 = __webpack_require__(/*! ./numeric-unicode-map */ "./node_modules/html-entities/lib/numeric-unicode-map.js"); -var surrogate_pairs_1 = __webpack_require__(/*! ./surrogate-pairs */ "./node_modules/html-entities/lib/surrogate-pairs.js"); -var allNamedReferences = __assign(__assign({}, named_references_1.namedReferences), { all: named_references_1.namedReferences.html5 }); -var encodeRegExps = { - specialChars: /[<>'"&]/g, - nonAscii: /(?:[<>'"&\u0080-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, - nonAsciiPrintable: /(?:[<>'"&\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, - extensive: /(?:[\x01-\x0c\x0e-\x1f\x21-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7d\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g -}; -var defaultEncodeOptions = { - mode: 'specialChars', - level: 'all', - numeric: 'decimal' -}; -/** Encodes all the necessary (specified by `level`) characters in the text */ -function encode(text, _a) { - var _b = _a === void 0 ? defaultEncodeOptions : _a, _c = _b.mode, mode = _c === void 0 ? 'specialChars' : _c, _d = _b.numeric, numeric = _d === void 0 ? 'decimal' : _d, _e = _b.level, level = _e === void 0 ? 'all' : _e; - if (!text) { - return ''; - } - var encodeRegExp = encodeRegExps[mode]; - var references = allNamedReferences[level].characters; - var isHex = numeric === 'hexadecimal'; - encodeRegExp.lastIndex = 0; - var _b = encodeRegExp.exec(text); - var _c; - if (_b) { - _c = ''; - var _d = 0; - do { - if (_d !== _b.index) { - _c += text.substring(_d, _b.index); - } - var _e = _b[0]; - var result_1 = references[_e]; - if (!result_1) { - var code_1 = _e.length > 1 ? surrogate_pairs_1.getCodePoint(_e, 0) : _e.charCodeAt(0); - result_1 = (isHex ? '&#x' + code_1.toString(16) : '&#' + code_1) + ';'; - } - _c += result_1; - _d = _b.index + _e.length; - } while ((_b = encodeRegExp.exec(text))); - if (_d !== text.length) { - _c += text.substring(_d); - } - } - else { - _c = - text; - } - return _c; -} -exports.encode = encode; -var defaultDecodeOptions = { - scope: 'body', - level: 'all' -}; -var strict = /&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g; -var attribute = /&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g; -var baseDecodeRegExps = { - xml: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.xml - }, - html4: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.html4 - }, - html5: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.html5 - } -}; -var decodeRegExps = __assign(__assign({}, baseDecodeRegExps), { all: baseDecodeRegExps.html5 }); -var fromCharCode = String.fromCharCode; -var outOfBoundsChar = fromCharCode(65533); -var defaultDecodeEntityOptions = { - level: 'all' -}; -/** Decodes a single entity */ -function decodeEntity(entity, _a) { - var _b = (_a === void 0 ? defaultDecodeEntityOptions : _a).level, level = _b === void 0 ? 'all' : _b; - if (!entity) { - return ''; - } - var _b = entity; - var decodeEntityLastChar_1 = entity[entity.length - 1]; - if (false) {} - else if (false) {} - else { - var decodeResultByReference_1 = allNamedReferences[level].entities[entity]; - if (decodeResultByReference_1) { - _b = decodeResultByReference_1; - } - else if (entity[0] === '&' && entity[1] === '#') { - var decodeSecondChar_1 = entity[2]; - var decodeCode_1 = decodeSecondChar_1 == 'x' || decodeSecondChar_1 == 'X' - ? parseInt(entity.substr(3), 16) - : parseInt(entity.substr(2)); - _b = - decodeCode_1 >= 0x10ffff - ? outOfBoundsChar - : decodeCode_1 > 65535 - ? surrogate_pairs_1.fromCodePoint(decodeCode_1) - : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_1] || decodeCode_1); - } - } - return _b; -} -exports.decodeEntity = decodeEntity; -/** Decodes all entities in the text */ -function decode(text, _a) { - var decodeSecondChar_1 = _a === void 0 ? defaultDecodeOptions : _a, decodeCode_1 = decodeSecondChar_1.level, level = decodeCode_1 === void 0 ? 'all' : decodeCode_1, _b = decodeSecondChar_1.scope, scope = _b === void 0 ? level === 'xml' ? 'strict' : 'body' : _b; - if (!text) { - return ''; - } - var decodeRegExp = decodeRegExps[level][scope]; - var references = allNamedReferences[level].entities; - var isAttribute = scope === 'attribute'; - var isStrict = scope === 'strict'; - decodeRegExp.lastIndex = 0; - var replaceMatch_1 = decodeRegExp.exec(text); - var replaceResult_1; - if (replaceMatch_1) { - replaceResult_1 = ''; - var replaceLastIndex_1 = 0; - do { - if (replaceLastIndex_1 !== replaceMatch_1.index) { - replaceResult_1 += text.substring(replaceLastIndex_1, replaceMatch_1.index); - } - var replaceInput_1 = replaceMatch_1[0]; - var decodeResult_1 = replaceInput_1; - var decodeEntityLastChar_2 = replaceInput_1[replaceInput_1.length - 1]; - if (isAttribute - && decodeEntityLastChar_2 === '=') { - decodeResult_1 = replaceInput_1; - } - else if (isStrict - && decodeEntityLastChar_2 !== ';') { - decodeResult_1 = replaceInput_1; - } - else { - var decodeResultByReference_2 = references[replaceInput_1]; - if (decodeResultByReference_2) { - decodeResult_1 = decodeResultByReference_2; - } - else if (replaceInput_1[0] === '&' && replaceInput_1[1] === '#') { - var decodeSecondChar_2 = replaceInput_1[2]; - var decodeCode_2 = decodeSecondChar_2 == 'x' || decodeSecondChar_2 == 'X' - ? parseInt(replaceInput_1.substr(3), 16) - : parseInt(replaceInput_1.substr(2)); - decodeResult_1 = - decodeCode_2 >= 0x10ffff - ? outOfBoundsChar - : decodeCode_2 > 65535 - ? surrogate_pairs_1.fromCodePoint(decodeCode_2) - : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_2] || decodeCode_2); - } - } - replaceResult_1 += decodeResult_1; - replaceLastIndex_1 = replaceMatch_1.index + replaceInput_1.length; - } while ((replaceMatch_1 = decodeRegExp.exec(text))); - if (replaceLastIndex_1 !== text.length) { - replaceResult_1 += text.substring(replaceLastIndex_1); - } - } - else { - replaceResult_1 = - text; - } - return replaceResult_1; -} -exports.decode = decode; - - -/***/ }), - -/***/ "./node_modules/html-entities/lib/named-references.js": -/*!************************************************************!*\ - !*** ./node_modules/html-entities/lib/named-references.js ***! - \************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.bodyRegExps={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g};exports.namedReferences={xml:{entities:{"<":"<",">":">",""":'"',"'":"'","&":"&"},characters:{"<":"<",">":">",'"':""","'":"'","&":"&"}},html4:{entities:{"'":"'"," ":" "," ":" ","¡":"¡","¡":"¡","¢":"¢","¢":"¢","£":"£","£":"£","¤":"¤","¤":"¤","¥":"Â¥","¥":"Â¥","¦":"¦","¦":"¦","§":"§","§":"§","¨":"¨","¨":"¨","©":"©","©":"©","ª":"ª","ª":"ª","«":"«","«":"«","¬":"¬","¬":"¬","­":"­","­":"­","®":"®","®":"®","¯":"¯","¯":"¯","°":"°","°":"°","±":"±","±":"±","²":"²","²":"²","³":"³","³":"³","´":"´","´":"´","µ":"µ","µ":"µ","¶":"¶","¶":"¶","·":"·","·":"·","¸":"¸","¸":"¸","¹":"¹","¹":"¹","º":"º","º":"º","»":"»","»":"»","¼":"¼","¼":"¼","½":"½","½":"½","¾":"¾","¾":"¾","¿":"¿","¿":"¿","À":"À","À":"À","Á":"Ã","Á":"Ã","Â":"Â","Â":"Â","Ã":"Ã","Ã":"Ã","Ä":"Ä","Ä":"Ä","Å":"Ã…","Å":"Ã…","Æ":"Æ","Æ":"Æ","Ç":"Ç","Ç":"Ç","È":"È","È":"È","É":"É","É":"É","Ê":"Ê","Ê":"Ê","Ë":"Ë","Ë":"Ë","Ì":"ÃŒ","Ì":"ÃŒ","Í":"Ã","Í":"Ã","Î":"ÃŽ","Î":"ÃŽ","Ï":"Ã","Ï":"Ã","Ð":"Ã","Ð":"Ã","Ñ":"Ñ","Ñ":"Ñ","Ò":"Ã’","Ò":"Ã’","Ó":"Ó","Ó":"Ó","Ô":"Ô","Ô":"Ô","Õ":"Õ","Õ":"Õ","Ö":"Ö","Ö":"Ö","×":"×","×":"×","Ø":"Ø","Ø":"Ø","Ù":"Ù","Ù":"Ù","Ú":"Ú","Ú":"Ú","Û":"Û","Û":"Û","Ü":"Ü","Ü":"Ü","Ý":"Ã","Ý":"Ã","Þ":"Þ","Þ":"Þ","ß":"ß","ß":"ß","à":"à","à":"à","á":"á","á":"á","â":"â","â":"â","ã":"ã","ã":"ã","ä":"ä","ä":"ä","å":"Ã¥","å":"Ã¥","æ":"æ","æ":"æ","ç":"ç","ç":"ç","è":"è","è":"è","é":"é","é":"é","ê":"ê","ê":"ê","ë":"ë","ë":"ë","ì":"ì","ì":"ì","í":"í","í":"í","î":"î","î":"î","ï":"ï","ï":"ï","ð":"ð","ð":"ð","ñ":"ñ","ñ":"ñ","ò":"ò","ò":"ò","ó":"ó","ó":"ó","ô":"ô","ô":"ô","õ":"õ","õ":"õ","ö":"ö","ö":"ö","÷":"÷","÷":"÷","ø":"ø","ø":"ø","ù":"ù","ù":"ù","ú":"ú","ú":"ú","û":"û","û":"û","ü":"ü","ü":"ü","ý":"ý","ý":"ý","þ":"þ","þ":"þ","ÿ":"ÿ","ÿ":"ÿ",""":'"',""":'"',"&":"&","&":"&","<":"<","<":"<",">":">",">":">","Œ":"Å’","œ":"Å“","Š":"Å ","š":"Å¡","Ÿ":"Ÿ","ˆ":"ˆ","˜":"Ëœ"," ":" "," ":" "," ":" ","‌":"‌","‍":"â€","‎":"‎","‏":"â€","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","”":"â€","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","ƒ":"Æ’","Α":"Α","Β":"Î’","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Ν":"Î","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Υ":"Î¥","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","π":"Ï€","ρ":"Ï","ς":"Ï‚","σ":"σ","τ":"Ï„","υ":"Ï…","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","ϑ":"Ï‘","ϒ":"Ï’","ϖ":"Ï–","•":"•","…":"…","′":"′","″":"″","‾":"‾","⁄":"â„","℘":"℘","ℑ":"â„‘","ℜ":"ℜ","™":"â„¢","ℵ":"ℵ","←":"â†","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","⇐":"â‡","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","∏":"âˆ","∑":"∑","−":"−","∗":"∗","√":"√","∝":"âˆ","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","⋅":"â‹…","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","⟨":"〈","⟩":"〉","◊":"â—Š","♠":"â™ ","♣":"♣","♥":"♥","♦":"♦"},characters:{"'":"'"," ":" ","¡":"¡","¢":"¢","£":"£","¤":"¤","Â¥":"¥","¦":"¦","§":"§","¨":"¨","©":"©","ª":"ª","«":"«","¬":"¬","­":"­","®":"®","¯":"¯","°":"°","±":"±","²":"²","³":"³","´":"´","µ":"µ","¶":"¶","·":"·","¸":"¸","¹":"¹","º":"º","»":"»","¼":"¼","½":"½","¾":"¾","¿":"¿","À":"À","Ã":"Á","Â":"Â","Ã":"Ã","Ä":"Ä","Ã…":"Å","Æ":"Æ","Ç":"Ç","È":"È","É":"É","Ê":"Ê","Ë":"Ë","ÃŒ":"Ì","Ã":"Í","ÃŽ":"Î","Ã":"Ï","Ã":"Ð","Ñ":"Ñ","Ã’":"Ò","Ó":"Ó","Ô":"Ô","Õ":"Õ","Ö":"Ö","×":"×","Ø":"Ø","Ù":"Ù","Ú":"Ú","Û":"Û","Ü":"Ü","Ã":"Ý","Þ":"Þ","ß":"ß","à":"à","á":"á","â":"â","ã":"ã","ä":"ä","Ã¥":"å","æ":"æ","ç":"ç","è":"è","é":"é","ê":"ê","ë":"ë","ì":"ì","í":"í","î":"î","ï":"ï","ð":"ð","ñ":"ñ","ò":"ò","ó":"ó","ô":"ô","õ":"õ","ö":"ö","÷":"÷","ø":"ø","ù":"ù","ú":"ú","û":"û","ü":"ü","ý":"ý","þ":"þ","ÿ":"ÿ",'"':""","&":"&","<":"<",">":">","Å’":"Œ","Å“":"œ","Å ":"Š","Å¡":"š","Ÿ":"Ÿ","ˆ":"ˆ","Ëœ":"˜"," ":" "," ":" "," ":" ","‌":"‌","â€":"‍","‎":"‎","â€":"‏","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","â€":"”","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","Æ’":"ƒ","Α":"Α","Î’":"Β","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Î":"Ν","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Î¥":"Υ","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","Ï€":"π","Ï":"ρ","Ï‚":"ς","σ":"σ","Ï„":"τ","Ï…":"υ","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","Ï‘":"ϑ","Ï’":"ϒ","Ï–":"ϖ","•":"•","…":"…","′":"′","″":"″","‾":"‾","â„":"⁄","℘":"℘","â„‘":"ℑ","ℜ":"ℜ","â„¢":"™","ℵ":"ℵ","â†":"←","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","â‡":"⇐","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","âˆ":"∏","∑":"∑","−":"−","∗":"∗","√":"√","âˆ":"∝","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","â‹…":"⋅","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","〈":"⟨","〉":"⟩","â—Š":"◊","â™ ":"♠","♣":"♣","♥":"♥","♦":"♦"}},html5:{entities:{"Æ":"Æ","Æ":"Æ","&":"&","&":"&","Á":"Ã","Á":"Ã","Ă":"Ä‚","Â":"Â","Â":"Â","А":"Ð","𝔄":"ð”„","À":"À","À":"À","Α":"Α","Ā":"Ä€","⩓":"â©“","Ą":"Ä„","𝔸":"ð”¸","⁡":"â¡","Å":"Ã…","Å":"Ã…","𝒜":"ð’œ","≔":"≔","Ã":"Ã","Ã":"Ã","Ä":"Ä","Ä":"Ä","∖":"∖","⫧":"â«§","⌆":"⌆","Б":"Б","∵":"∵","ℬ":"ℬ","Β":"Î’","𝔅":"ð”…","𝔹":"ð”¹","˘":"˘","ℬ":"ℬ","≎":"≎","Ч":"Ч","©":"©","©":"©","Ć":"Ć","⋒":"â‹’","ⅅ":"â……","ℭ":"â„­","Č":"ÄŒ","Ç":"Ç","Ç":"Ç","Ĉ":"Ĉ","∰":"∰","Ċ":"ÄŠ","¸":"¸","·":"·","ℭ":"â„­","Χ":"Χ","⊙":"⊙","⊖":"⊖","⊕":"⊕","⊗":"⊗","∲":"∲","”":"â€","’":"’","∷":"∷","⩴":"â©´","≡":"≡","∯":"∯","∮":"∮","ℂ":"â„‚","∐":"âˆ","∳":"∳","⨯":"⨯","𝒞":"ð’ž","⋓":"â‹“","≍":"â‰","ⅅ":"â……","⤑":"⤑","Ђ":"Ђ","Ѕ":"Ð…","Џ":"Ð","‡":"‡","↡":"↡","⫤":"⫤","Ď":"ÄŽ","Д":"Д","∇":"∇","Δ":"Δ","𝔇":"ð”‡","´":"´","˙":"Ë™","˝":"Ë","`":"`","˜":"Ëœ","⋄":"â‹„","ⅆ":"â…†","𝔻":"ð”»","¨":"¨","⃜":"⃜","≐":"â‰","∯":"∯","¨":"¨","⇓":"⇓","⇐":"â‡","⇔":"⇔","⫤":"⫤","⟸":"⟸","⟺":"⟺","⟹":"⟹","⇒":"⇒","⊨":"⊨","⇑":"⇑","⇕":"⇕","∥":"∥","↓":"↓","⤓":"⤓","⇵":"⇵","̑":"Ì‘","⥐":"â¥","⥞":"⥞","↽":"↽","⥖":"⥖","⥟":"⥟","⇁":"â‡","⥗":"⥗","⊤":"⊤","↧":"↧","⇓":"⇓","𝒟":"ð’Ÿ","Đ":"Ä","Ŋ":"ÅŠ","Ð":"Ã","Ð":"Ã","É":"É","É":"É","Ě":"Äš","Ê":"Ê","Ê":"Ê","Э":"Э","Ė":"Ä–","𝔈":"ð”ˆ","È":"È","È":"È","∈":"∈","Ē":"Ä’","◻":"â—»","▫":"â–«","Ę":"Ę","𝔼":"ð”¼","Ε":"Ε","⩵":"⩵","≂":"≂","⇌":"⇌","ℰ":"â„°","⩳":"⩳","Η":"Η","Ë":"Ë","Ë":"Ë","∃":"∃","ⅇ":"â…‡","Ф":"Ф","𝔉":"ð”‰","◼":"â—¼","▪":"â–ª","𝔽":"ð”½","∀":"∀","ℱ":"ℱ","ℱ":"ℱ","Ѓ":"Ѓ",">":">",">":">","Γ":"Γ","Ϝ":"Ïœ","Ğ":"Äž","Ģ":"Ä¢","Ĝ":"Äœ","Г":"Г","Ġ":"Ä ","𝔊":"ð”Š","⋙":"â‹™","𝔾":"ð”¾","≥":"≥","⋛":"â‹›","≧":"≧","⪢":"⪢","≷":"≷","⩾":"⩾","≳":"≳","𝒢":"ð’¢","≫":"≫","Ъ":"Ъ","ˇ":"ˇ","^":"^","Ĥ":"Ĥ","ℌ":"ℌ","ℋ":"â„‹","ℍ":"â„","─":"─","ℋ":"â„‹","Ħ":"Ħ","≎":"≎","≏":"â‰","Е":"Е","IJ":"IJ","Ё":"Ð","Í":"Ã","Í":"Ã","Î":"ÃŽ","Î":"ÃŽ","И":"И","İ":"İ","ℑ":"â„‘","Ì":"ÃŒ","Ì":"ÃŒ","ℑ":"â„‘","Ī":"Ī","ⅈ":"â…ˆ","⇒":"⇒","∬":"∬","∫":"∫","⋂":"â‹‚","⁣":"â£","⁢":"â¢","Į":"Ä®","𝕀":"ð•€","Ι":"Ι","ℐ":"â„","Ĩ":"Ĩ","І":"І","Ï":"Ã","Ï":"Ã","Ĵ":"Ä´","Й":"Й","𝔍":"ð”","𝕁":"ð•","𝒥":"ð’¥","Ј":"Ј","Є":"Є","Х":"Ð¥","Ќ":"ÐŒ","Κ":"Κ","Ķ":"Ķ","К":"К","𝔎":"ð”Ž","𝕂":"ð•‚","𝒦":"ð’¦","Љ":"Љ","<":"<","<":"<","Ĺ":"Ĺ","Λ":"Λ","⟪":"⟪","ℒ":"â„’","↞":"↞","Ľ":"Ľ","Ļ":"Ä»","Л":"Л","⟨":"⟨","←":"â†","⇤":"⇤","⇆":"⇆","⌈":"⌈","⟦":"⟦","⥡":"⥡","⇃":"⇃","⥙":"⥙","⌊":"⌊","↔":"↔","⥎":"⥎","⊣":"⊣","↤":"↤","⥚":"⥚","⊲":"⊲","⧏":"â§","⊴":"⊴","⥑":"⥑","⥠":"⥠","↿":"↿","⥘":"⥘","↼":"↼","⥒":"⥒","⇐":"â‡","⇔":"⇔","⋚":"⋚","≦":"≦","≶":"≶","⪡":"⪡","⩽":"⩽","≲":"≲","𝔏":"ð”","⋘":"⋘","⇚":"⇚","Ŀ":"Ä¿","⟵":"⟵","⟷":"⟷","⟶":"⟶","⟸":"⟸","⟺":"⟺","⟹":"⟹","𝕃":"ð•ƒ","↙":"↙","↘":"↘","ℒ":"â„’","↰":"↰","Ł":"Å","≪":"≪","⤅":"⤅","М":"М"," ":"âŸ","ℳ":"ℳ","𝔐":"ð”","∓":"∓","𝕄":"ð•„","ℳ":"ℳ","Μ":"Μ","Њ":"Њ","Ń":"Ń","Ň":"Ň","Ņ":"Å…","Н":"Ð","​":"​","​":"​","​":"​","​":"​","≫":"≫","≪":"≪"," ":"\n","𝔑":"ð”‘","⁠":"â "," ":" ","ℕ":"â„•","⫬":"⫬","≢":"≢","≭":"≭","∦":"∦","∉":"∉","≠":"≠","≂̸":"≂̸","∄":"∄","≯":"≯","≱":"≱","≧̸":"≧̸","≫̸":"≫̸","≹":"≹","⩾̸":"⩾̸","≵":"≵","≎̸":"≎̸","≏̸":"â‰Ì¸","⋪":"⋪","⧏̸":"â§Ì¸","⋬":"⋬","≮":"≮","≰":"≰","≸":"≸","≪̸":"≪̸","⩽̸":"⩽̸","≴":"≴","⪢̸":"⪢̸","⪡̸":"⪡̸","⊀":"⊀","⪯̸":"⪯̸","⋠":"â‹ ","∌":"∌","⋫":"â‹«","⧐̸":"â§Ì¸","⋭":"â‹­","⊏̸":"âŠÌ¸","⋢":"â‹¢","⊐̸":"âŠÌ¸","⋣":"â‹£","⊂⃒":"⊂⃒","⊈":"⊈","⊁":"âŠ","⪰̸":"⪰̸","⋡":"â‹¡","≿̸":"≿̸","⊃⃒":"⊃⃒","⊉":"⊉","≁":"â‰","≄":"≄","≇":"≇","≉":"≉","∤":"∤","𝒩":"ð’©","Ñ":"Ñ","Ñ":"Ñ","Ν":"Î","Œ":"Å’","Ó":"Ó","Ó":"Ó","Ô":"Ô","Ô":"Ô","О":"О","Ő":"Å","𝔒":"ð”’","Ò":"Ã’","Ò":"Ã’","Ō":"ÅŒ","Ω":"Ω","Ο":"Ο","𝕆":"ð•†","“":"“","‘":"‘","⩔":"â©”","𝒪":"ð’ª","Ø":"Ø","Ø":"Ø","Õ":"Õ","Õ":"Õ","⨷":"⨷","Ö":"Ö","Ö":"Ö","‾":"‾","⏞":"âž","⎴":"⎴","⏜":"âœ","∂":"∂","П":"П","𝔓":"ð”“","Φ":"Φ","Π":"Π","±":"±","ℌ":"ℌ","ℙ":"â„™","⪻":"⪻","≺":"≺","⪯":"⪯","≼":"≼","≾":"≾","″":"″","∏":"âˆ","∷":"∷","∝":"âˆ","𝒫":"ð’«","Ψ":"Ψ",""":'"',""":'"',"𝔔":"ð””","ℚ":"ℚ","𝒬":"ð’¬","⤐":"â¤","®":"®","®":"®","Ŕ":"Å”","⟫":"⟫","↠":"↠","⤖":"⤖","Ř":"Ř","Ŗ":"Å–","Р":"Р","ℜ":"ℜ","∋":"∋","⇋":"⇋","⥯":"⥯","ℜ":"ℜ","Ρ":"Ρ","⟩":"⟩","→":"→","⇥":"⇥","⇄":"⇄","⌉":"⌉","⟧":"⟧","⥝":"â¥","⇂":"⇂","⥕":"⥕","⌋":"⌋","⊢":"⊢","↦":"↦","⥛":"⥛","⊳":"⊳","⧐":"â§","⊵":"⊵","⥏":"â¥","⥜":"⥜","↾":"↾","⥔":"⥔","⇀":"⇀","⥓":"⥓","⇒":"⇒","ℝ":"â„","⥰":"⥰","⇛":"⇛","ℛ":"â„›","↱":"↱","⧴":"â§´","Щ":"Щ","Ш":"Ш","Ь":"Ь","Ś":"Åš","⪼":"⪼","Š":"Å ","Ş":"Åž","Ŝ":"Åœ","С":"С","𝔖":"ð”–","↓":"↓","←":"â†","→":"→","↑":"↑","Σ":"Σ","∘":"∘","𝕊":"ð•Š","√":"√","□":"â–¡","⊓":"⊓","⊏":"âŠ","⊑":"⊑","⊐":"âŠ","⊒":"⊒","⊔":"⊔","𝒮":"ð’®","⋆":"⋆","⋐":"â‹","⋐":"â‹","⊆":"⊆","≻":"≻","⪰":"⪰","≽":"≽","≿":"≿","∋":"∋","∑":"∑","⋑":"â‹‘","⊃":"⊃","⊇":"⊇","⋑":"â‹‘","Þ":"Þ","Þ":"Þ","™":"â„¢","Ћ":"Ћ","Ц":"Ц"," ":"\t","Τ":"Τ","Ť":"Ť","Ţ":"Å¢","Т":"Т","𝔗":"ð”—","∴":"∴","Θ":"Θ","  ":"âŸâ€Š"," ":" ","∼":"∼","≃":"≃","≅":"≅","≈":"≈","𝕋":"ð•‹","⃛":"⃛","𝒯":"ð’¯","Ŧ":"Ŧ","Ú":"Ú","Ú":"Ú","↟":"↟","⥉":"⥉","Ў":"ÐŽ","Ŭ":"Ŭ","Û":"Û","Û":"Û","У":"У","Ű":"Ű","𝔘":"ð”˜","Ù":"Ù","Ù":"Ù","Ū":"Ū","_":"_","⏟":"âŸ","⎵":"⎵","⏝":"â","⋃":"⋃","⊎":"⊎","Ų":"Ų","𝕌":"ð•Œ","↑":"↑","⤒":"⤒","⇅":"⇅","↕":"↕","⥮":"⥮","⊥":"⊥","↥":"↥","⇑":"⇑","⇕":"⇕","↖":"↖","↗":"↗","ϒ":"Ï’","Υ":"Î¥","Ů":"Å®","𝒰":"ð’°","Ũ":"Ũ","Ü":"Ü","Ü":"Ü","⊫":"⊫","⫫":"â««","В":"Ð’","⊩":"⊩","⫦":"⫦","⋁":"â‹","‖":"‖","‖":"‖","∣":"∣","|":"|","❘":"â˜","≀":"≀"," ":" ","𝔙":"ð”™","𝕍":"ð•","𝒱":"ð’±","⊪":"⊪","Ŵ":"Å´","⋀":"â‹€","𝔚":"ð”š","𝕎":"ð•Ž","𝒲":"ð’²","𝔛":"ð”›","Ξ":"Ξ","𝕏":"ð•","𝒳":"ð’³","Я":"Я","Ї":"Ї","Ю":"Ю","Ý":"Ã","Ý":"Ã","Ŷ":"Ŷ","Ы":"Ы","𝔜":"ð”œ","𝕐":"ð•","𝒴":"ð’´","Ÿ":"Ÿ","Ж":"Ж","Ź":"Ź","Ž":"Ž","З":"З","Ż":"Å»","​":"​","Ζ":"Ζ","ℨ":"ℨ","ℤ":"ℤ","𝒵":"ð’µ","á":"á","á":"á","ă":"ă","∾":"∾","∾̳":"∾̳","∿":"∿","â":"â","â":"â","´":"´","´":"´","а":"а","æ":"æ","æ":"æ","⁡":"â¡","𝔞":"ð”ž","à":"à","à":"à","ℵ":"ℵ","ℵ":"ℵ","α":"α","ā":"Ä","⨿":"⨿","&":"&","&":"&","∧":"∧","⩕":"â©•","⩜":"⩜","⩘":"⩘","⩚":"⩚","∠":"∠","⦤":"⦤","∠":"∠","∡":"∡","⦨":"⦨","⦩":"⦩","⦪":"⦪","⦫":"⦫","⦬":"⦬","⦭":"⦭","⦮":"⦮","⦯":"⦯","∟":"∟","⊾":"⊾","⦝":"â¦","∢":"∢","Å":"Ã…","⍼":"â¼","ą":"Ä…","𝕒":"ð•’","≈":"≈","⩰":"â©°","⩯":"⩯","≊":"≊","≋":"≋","'":"'","≈":"≈","≊":"≊","å":"Ã¥","å":"Ã¥","𝒶":"ð’¶","*":"*","≈":"≈","≍":"â‰","ã":"ã","ã":"ã","ä":"ä","ä":"ä","∳":"∳","⨑":"⨑","⫭":"â«­","≌":"≌","϶":"϶","‵":"‵","∽":"∽","⋍":"â‹","⊽":"⊽","⌅":"⌅","⌅":"⌅","⎵":"⎵","⎶":"⎶","≌":"≌","б":"б","„":"„","∵":"∵","∵":"∵","⦰":"⦰","϶":"϶","ℬ":"ℬ","β":"β","ℶ":"â„¶","≬":"≬","𝔟":"ð”Ÿ","⋂":"â‹‚","◯":"â—¯","⋃":"⋃","⨀":"⨀","⨁":"â¨","⨂":"⨂","⨆":"⨆","★":"★","▽":"â–½","△":"â–³","⨄":"⨄","⋁":"â‹","⋀":"â‹€","⤍":"â¤","⧫":"â§«","▪":"â–ª","▴":"â–´","▾":"â–¾","◂":"â—‚","▸":"â–¸","␣":"â£","▒":"â–’","░":"â–‘","▓":"â–“","█":"â–ˆ","=⃥":"=⃥","≡⃥":"≡⃥","⌐":"âŒ","𝕓":"ð•“","⊥":"⊥","⊥":"⊥","⋈":"⋈","╗":"â•—","╔":"â•”","╖":"â•–","╓":"â•“","═":"â•","╦":"╦","╩":"â•©","╤":"╤","╧":"â•§","╝":"â•","╚":"╚","╜":"╜","╙":"â•™","║":"â•‘","╬":"╬","╣":"â•£","╠":"â• ","╫":"â•«","╢":"â•¢","╟":"╟","⧉":"⧉","╕":"â••","╒":"â•’","┐":"â”","┌":"┌","─":"─","╥":"â•¥","╨":"╨","┬":"┬","┴":"â”´","⊟":"⊟","⊞":"⊞","⊠":"⊠","╛":"â•›","╘":"╘","┘":"┘","└":"â””","│":"│","╪":"╪","╡":"â•¡","╞":"╞","┼":"┼","┤":"┤","├":"├","‵":"‵","˘":"˘","¦":"¦","¦":"¦","𝒷":"ð’·","⁏":"â","∽":"∽","⋍":"â‹","\":"\\","⧅":"â§…","⟈":"⟈","•":"•","•":"•","≎":"≎","⪮":"⪮","≏":"â‰","≏":"â‰","ć":"ć","∩":"∩","⩄":"â©„","⩉":"⩉","⩋":"â©‹","⩇":"⩇","⩀":"â©€","∩︀":"∩︀","⁁":"â","ˇ":"ˇ","⩍":"â©","č":"Ä","ç":"ç","ç":"ç","ĉ":"ĉ","⩌":"⩌","⩐":"â©","ċ":"Ä‹","¸":"¸","¸":"¸","⦲":"⦲","¢":"¢","¢":"¢","·":"·","𝔠":"ð” ","ч":"ч","✓":"✓","✓":"✓","χ":"χ","○":"â—‹","⧃":"⧃","ˆ":"ˆ","≗":"≗","↺":"↺","↻":"↻","®":"®","Ⓢ":"Ⓢ","⊛":"⊛","⊚":"⊚","⊝":"âŠ","≗":"≗","⨐":"â¨","⫯":"⫯","⧂":"â§‚","♣":"♣","♣":"♣",":":":","≔":"≔","≔":"≔",",":",","@":"@","∁":"âˆ","∘":"∘","∁":"âˆ","ℂ":"â„‚","≅":"≅","⩭":"â©­","∮":"∮","𝕔":"ð•”","∐":"âˆ","©":"©","©":"©","℗":"â„—","↵":"↵","✗":"✗","𝒸":"ð’¸","⫏":"â«","⫑":"â«‘","⫐":"â«","⫒":"â«’","⋯":"⋯","⤸":"⤸","⤵":"⤵","⋞":"⋞","⋟":"⋟","↶":"↶","⤽":"⤽","∪":"∪","⩈":"⩈","⩆":"⩆","⩊":"⩊","⊍":"âŠ","⩅":"â©…","∪︀":"∪︀","↷":"↷","⤼":"⤼","⋞":"⋞","⋟":"⋟","⋎":"⋎","⋏":"â‹","¤":"¤","¤":"¤","↶":"↶","↷":"↷","⋎":"⋎","⋏":"â‹","∲":"∲","∱":"∱","⌭":"⌭","⇓":"⇓","⥥":"⥥","†":"†","ℸ":"ℸ","↓":"↓","‐":"â€","⊣":"⊣","⤏":"â¤","˝":"Ë","ď":"Ä","д":"д","ⅆ":"â…†","‡":"‡","⇊":"⇊","⩷":"â©·","°":"°","°":"°","δ":"δ","⦱":"⦱","⥿":"⥿","𝔡":"ð”¡","⇃":"⇃","⇂":"⇂","⋄":"â‹„","⋄":"â‹„","♦":"♦","♦":"♦","¨":"¨","ϝ":"Ï","⋲":"⋲","÷":"÷","÷":"÷","÷":"÷","⋇":"⋇","⋇":"⋇","ђ":"Ñ’","⌞":"⌞","⌍":"âŒ","$":"$","𝕕":"ð••","˙":"Ë™","≐":"â‰","≑":"≑","∸":"∸","∔":"∔","⊡":"⊡","⌆":"⌆","↓":"↓","⇊":"⇊","⇃":"⇃","⇂":"⇂","⤐":"â¤","⌟":"⌟","⌌":"⌌","𝒹":"ð’¹","ѕ":"Ñ•","⧶":"â§¶","đ":"Ä‘","⋱":"⋱","▿":"â–¿","▾":"â–¾","⇵":"⇵","⥯":"⥯","⦦":"⦦","џ":"ÑŸ","⟿":"⟿","⩷":"â©·","≑":"≑","é":"é","é":"é","⩮":"â©®","ě":"Ä›","≖":"≖","ê":"ê","ê":"ê","≕":"≕","э":"Ñ","ė":"Ä—","ⅇ":"â…‡","≒":"≒","𝔢":"ð”¢","⪚":"⪚","è":"è","è":"è","⪖":"⪖","⪘":"⪘","⪙":"⪙","⏧":"â§","ℓ":"â„“","⪕":"⪕","⪗":"⪗","ē":"Ä“","∅":"∅","∅":"∅","∅":"∅"," ":" "," ":" "," ":" ","ŋ":"Å‹"," ":" ","ę":"Ä™","𝕖":"ð•–","⋕":"â‹•","⧣":"â§£","⩱":"⩱","ε":"ε","ε":"ε","ϵ":"ϵ","≖":"≖","≕":"≕","≂":"≂","⪖":"⪖","⪕":"⪕","=":"=","≟":"≟","≡":"≡","⩸":"⩸","⧥":"â§¥","≓":"≓","⥱":"⥱","ℯ":"ℯ","≐":"â‰","≂":"≂","η":"η","ð":"ð","ð":"ð","ë":"ë","ë":"ë","€":"€","!":"!","∃":"∃","ℰ":"â„°","ⅇ":"â…‡","≒":"≒","ф":"Ñ„","♀":"♀","ffi":"ffi","ff":"ff","ffl":"ffl","𝔣":"ð”£","fi":"ï¬","fj":"fj","♭":"â™­","fl":"fl","▱":"â–±","ƒ":"Æ’","𝕗":"ð•—","∀":"∀","⋔":"â‹”","⫙":"â«™","⨍":"â¨","½":"½","½":"½","⅓":"â…“","¼":"¼","¼":"¼","⅕":"â…•","⅙":"â…™","⅛":"â…›","⅔":"â…”","⅖":"â…–","¾":"¾","¾":"¾","⅗":"â…—","⅜":"â…œ","⅘":"â…˜","⅚":"â…š","⅝":"â…","⅞":"â…ž","⁄":"â„","⌢":"⌢","𝒻":"ð’»","≧":"≧","⪌":"⪌","ǵ":"ǵ","γ":"γ","ϝ":"Ï","⪆":"⪆","ğ":"ÄŸ","ĝ":"Ä","г":"г","ġ":"Ä¡","≥":"≥","⋛":"â‹›","≥":"≥","≧":"≧","⩾":"⩾","⩾":"⩾","⪩":"⪩","⪀":"⪀","⪂":"⪂","⪄":"⪄","⋛︀":"⋛︀","⪔":"⪔","𝔤":"ð”¤","≫":"≫","⋙":"â‹™","ℷ":"â„·","ѓ":"Ñ“","≷":"≷","⪒":"⪒","⪥":"⪥","⪤":"⪤","≩":"≩","⪊":"⪊","⪊":"⪊","⪈":"⪈","⪈":"⪈","≩":"≩","⋧":"â‹§","𝕘":"ð•˜","`":"`","ℊ":"ℊ","≳":"≳","⪎":"⪎","⪐":"âª",">":">",">":">","⪧":"⪧","⩺":"⩺","⋗":"â‹—","⦕":"⦕","⩼":"⩼","⪆":"⪆","⥸":"⥸","⋗":"â‹—","⋛":"â‹›","⪌":"⪌","≷":"≷","≳":"≳","≩︀":"≩︀","≩︀":"≩︀","⇔":"⇔"," ":" ","½":"½","ℋ":"â„‹","ъ":"ÑŠ","↔":"↔","⥈":"⥈","↭":"↭","ℏ":"â„","ĥ":"Ä¥","♥":"♥","♥":"♥","…":"…","⊹":"⊹","𝔥":"ð”¥","⤥":"⤥","⤦":"⤦","⇿":"⇿","∻":"∻","↩":"↩","↪":"↪","𝕙":"ð•™","―":"―","𝒽":"ð’½","ℏ":"â„","ħ":"ħ","⁃":"âƒ","‐":"â€","í":"í","í":"í","⁣":"â£","î":"î","î":"î","и":"и","е":"е","¡":"¡","¡":"¡","⇔":"⇔","𝔦":"ð”¦","ì":"ì","ì":"ì","ⅈ":"â…ˆ","⨌":"⨌","∭":"∭","⧜":"â§œ","℩":"â„©","ij":"ij","ī":"Ä«","ℑ":"â„‘","ℐ":"â„","ℑ":"â„‘","ı":"ı","⊷":"⊷","Ƶ":"Ƶ","∈":"∈","℅":"â„…","∞":"∞","⧝":"â§","ı":"ı","∫":"∫","⊺":"⊺","ℤ":"ℤ","⊺":"⊺","⨗":"⨗","⨼":"⨼","ё":"Ñ‘","į":"į","𝕚":"ð•š","ι":"ι","⨼":"⨼","¿":"¿","¿":"¿","𝒾":"ð’¾","∈":"∈","⋹":"⋹","⋵":"⋵","⋴":"â‹´","⋳":"⋳","∈":"∈","⁢":"â¢","ĩ":"Ä©","і":"Ñ–","ï":"ï","ï":"ï","ĵ":"ĵ","й":"й","𝔧":"ð”§","ȷ":"È·","𝕛":"ð•›","𝒿":"ð’¿","ј":"ј","є":"Ñ”","κ":"κ","ϰ":"ϰ","ķ":"Ä·","к":"к","𝔨":"ð”¨","ĸ":"ĸ","х":"Ñ…","ќ":"Ñœ","𝕜":"ð•œ","𝓀":"ð“€","⇚":"⇚","⇐":"â‡","⤛":"⤛","⤎":"⤎","≦":"≦","⪋":"⪋","⥢":"⥢","ĺ":"ĺ","⦴":"⦴","ℒ":"â„’","λ":"λ","⟨":"⟨","⦑":"⦑","⟨":"⟨","⪅":"⪅","«":"«","«":"«","←":"â†","⇤":"⇤","⤟":"⤟","⤝":"â¤","↩":"↩","↫":"↫","⤹":"⤹","⥳":"⥳","↢":"↢","⪫":"⪫","⤙":"⤙","⪭":"⪭","⪭︀":"⪭︀","⤌":"⤌","❲":"â²","{":"{","[":"[","⦋":"⦋","⦏":"â¦","⦍":"â¦","ľ":"ľ","ļ":"ļ","⌈":"⌈","{":"{","л":"л","⤶":"⤶","“":"“","„":"„","⥧":"⥧","⥋":"⥋","↲":"↲","≤":"≤","←":"â†","↢":"↢","↽":"↽","↼":"↼","⇇":"⇇","↔":"↔","⇆":"⇆","⇋":"⇋","↭":"↭","⋋":"â‹‹","⋚":"⋚","≤":"≤","≦":"≦","⩽":"⩽","⩽":"⩽","⪨":"⪨","⩿":"â©¿","⪁":"âª","⪃":"⪃","⋚︀":"⋚︀","⪓":"⪓","⪅":"⪅","⋖":"â‹–","⋚":"⋚","⪋":"⪋","≶":"≶","≲":"≲","⥼":"⥼","⌊":"⌊","𝔩":"ð”©","≶":"≶","⪑":"⪑","↽":"↽","↼":"↼","⥪":"⥪","▄":"â–„","љ":"Ñ™","≪":"≪","⇇":"⇇","⌞":"⌞","⥫":"⥫","◺":"â—º","ŀ":"Å€","⎰":"⎰","⎰":"⎰","≨":"≨","⪉":"⪉","⪉":"⪉","⪇":"⪇","⪇":"⪇","≨":"≨","⋦":"⋦","⟬":"⟬","⇽":"⇽","⟦":"⟦","⟵":"⟵","⟷":"⟷","⟼":"⟼","⟶":"⟶","↫":"↫","↬":"↬","⦅":"⦅","𝕝":"ð•","⨭":"⨭","⨴":"⨴","∗":"∗","_":"_","◊":"â—Š","◊":"â—Š","⧫":"â§«","(":"(","⦓":"⦓","⇆":"⇆","⌟":"⌟","⇋":"⇋","⥭":"⥭","‎":"‎","⊿":"⊿","‹":"‹","𝓁":"ð“","↰":"↰","≲":"≲","⪍":"âª","⪏":"âª","[":"[","‘":"‘","‚":"‚","ł":"Å‚","<":"<","<":"<","⪦":"⪦","⩹":"⩹","⋖":"â‹–","⋋":"â‹‹","⋉":"⋉","⥶":"⥶","⩻":"â©»","⦖":"⦖","◃":"â—ƒ","⊴":"⊴","◂":"â—‚","⥊":"⥊","⥦":"⥦","≨︀":"≨︀","≨︀":"≨︀","∺":"∺","¯":"¯","¯":"¯","♂":"♂","✠":"✠","✠":"✠","↦":"↦","↦":"↦","↧":"↧","↤":"↤","↥":"↥","▮":"â–®","⨩":"⨩","м":"м","—":"—","∡":"∡","𝔪":"ð”ª","℧":"â„§","µ":"µ","µ":"µ","∣":"∣","*":"*","⫰":"â«°","·":"·","·":"·","−":"−","⊟":"⊟","∸":"∸","⨪":"⨪","⫛":"â«›","…":"…","∓":"∓","⊧":"⊧","𝕞":"ð•ž","∓":"∓","𝓂":"ð“‚","∾":"∾","μ":"μ","⊸":"⊸","⊸":"⊸","⋙̸":"⋙̸","≫⃒":"≫⃒","≫̸":"≫̸","⇍":"â‡","⇎":"⇎","⋘̸":"⋘̸","≪⃒":"≪⃒","≪̸":"≪̸","⇏":"â‡","⊯":"⊯","⊮":"⊮","∇":"∇","ń":"Å„","∠⃒":"∠⃒","≉":"≉","⩰̸":"⩰̸","≋̸":"≋̸","ʼn":"ʼn","≉":"≉","♮":"â™®","♮":"â™®","ℕ":"â„•"," ":" "," ":" ","≎̸":"≎̸","≏̸":"â‰Ì¸","⩃":"⩃","ň":"ň","ņ":"ņ","≇":"≇","⩭̸":"⩭̸","⩂":"â©‚","н":"н","–":"–","≠":"≠","⇗":"⇗","⤤":"⤤","↗":"↗","↗":"↗","≐̸":"â‰Ì¸","≢":"≢","⤨":"⤨","≂̸":"≂̸","∄":"∄","∄":"∄","𝔫":"ð”«","≧̸":"≧̸","≱":"≱","≱":"≱","≧̸":"≧̸","⩾̸":"⩾̸","⩾̸":"⩾̸","≵":"≵","≯":"≯","≯":"≯","⇎":"⇎","↮":"↮","⫲":"⫲","∋":"∋","⋼":"⋼","⋺":"⋺","∋":"∋","њ":"Ñš","⇍":"â‡","≦̸":"≦̸","↚":"↚","‥":"‥","≰":"≰","↚":"↚","↮":"↮","≰":"≰","≦̸":"≦̸","⩽̸":"⩽̸","⩽̸":"⩽̸","≮":"≮","≴":"≴","≮":"≮","⋪":"⋪","⋬":"⋬","∤":"∤","𝕟":"ð•Ÿ","¬":"¬","¬":"¬","∉":"∉","⋹̸":"⋹̸","⋵̸":"⋵̸","∉":"∉","⋷":"â‹·","⋶":"â‹¶","∌":"∌","∌":"∌","⋾":"⋾","⋽":"⋽","∦":"∦","∦":"∦","⫽⃥":"⫽⃥","∂̸":"∂̸","⨔":"⨔","⊀":"⊀","⋠":"â‹ ","⪯̸":"⪯̸","⊀":"⊀","⪯̸":"⪯̸","⇏":"â‡","↛":"↛","⤳̸":"⤳̸","↝̸":"â†Ì¸","↛":"↛","⋫":"â‹«","⋭":"â‹­","⊁":"âŠ","⋡":"â‹¡","⪰̸":"⪰̸","𝓃":"ð“ƒ","∤":"∤","∦":"∦","≁":"â‰","≄":"≄","≄":"≄","∤":"∤","∦":"∦","⋢":"â‹¢","⋣":"â‹£","⊄":"⊄","⫅̸":"⫅̸","⊈":"⊈","⊂⃒":"⊂⃒","⊈":"⊈","⫅̸":"⫅̸","⊁":"âŠ","⪰̸":"⪰̸","⊅":"⊅","⫆̸":"⫆̸","⊉":"⊉","⊃⃒":"⊃⃒","⊉":"⊉","⫆̸":"⫆̸","≹":"≹","ñ":"ñ","ñ":"ñ","≸":"≸","⋪":"⋪","⋬":"⋬","⋫":"â‹«","⋭":"â‹­","ν":"ν","#":"#","№":"â„–"," ":" ","⊭":"⊭","⤄":"⤄","≍⃒":"â‰âƒ’","⊬":"⊬","≥⃒":"≥⃒",">⃒":">⃒","⧞":"â§ž","⤂":"⤂","≤⃒":"≤⃒","<⃒":"<⃒","⊴⃒":"⊴⃒","⤃":"⤃","⊵⃒":"⊵⃒","∼⃒":"∼⃒","⇖":"⇖","⤣":"⤣","↖":"↖","↖":"↖","⤧":"⤧","Ⓢ":"Ⓢ","ó":"ó","ó":"ó","⊛":"⊛","⊚":"⊚","ô":"ô","ô":"ô","о":"о","⊝":"âŠ","ő":"Å‘","⨸":"⨸","⊙":"⊙","⦼":"⦼","œ":"Å“","⦿":"⦿","𝔬":"ð”¬","˛":"Ë›","ò":"ò","ò":"ò","⧁":"â§","⦵":"⦵","Ω":"Ω","∮":"∮","↺":"↺","⦾":"⦾","⦻":"⦻","‾":"‾","⧀":"â§€","ō":"Å","ω":"ω","ο":"ο","⦶":"⦶","⊖":"⊖","𝕠":"ð• ","⦷":"⦷","⦹":"⦹","⊕":"⊕","∨":"∨","↻":"↻","⩝":"â©","ℴ":"â„´","ℴ":"â„´","ª":"ª","ª":"ª","º":"º","º":"º","⊶":"⊶","⩖":"â©–","⩗":"â©—","⩛":"â©›","ℴ":"â„´","ø":"ø","ø":"ø","⊘":"⊘","õ":"õ","õ":"õ","⊗":"⊗","⨶":"⨶","ö":"ö","ö":"ö","⌽":"⌽","∥":"∥","¶":"¶","¶":"¶","∥":"∥","⫳":"⫳","⫽":"⫽","∂":"∂","п":"п","%":"%",".":".","‰":"‰","⊥":"⊥","‱":"‱","𝔭":"ð”­","φ":"φ","ϕ":"Ï•","ℳ":"ℳ","☎":"☎","π":"Ï€","⋔":"â‹”","ϖ":"Ï–","ℏ":"â„","ℎ":"ℎ","ℏ":"â„","+":"+","⨣":"⨣","⊞":"⊞","⨢":"⨢","∔":"∔","⨥":"⨥","⩲":"⩲","±":"±","±":"±","⨦":"⨦","⨧":"⨧","±":"±","⨕":"⨕","𝕡":"ð•¡","£":"£","£":"£","≺":"≺","⪳":"⪳","⪷":"⪷","≼":"≼","⪯":"⪯","≺":"≺","⪷":"⪷","≼":"≼","⪯":"⪯","⪹":"⪹","⪵":"⪵","⋨":"⋨","≾":"≾","′":"′","ℙ":"â„™","⪵":"⪵","⪹":"⪹","⋨":"⋨","∏":"âˆ","⌮":"⌮","⌒":"⌒","⌓":"⌓","∝":"âˆ","∝":"âˆ","≾":"≾","⊰":"⊰","𝓅":"ð“…","ψ":"ψ"," ":" ","𝔮":"ð”®","⨌":"⨌","𝕢":"ð•¢","⁗":"â—","𝓆":"ð“†","ℍ":"â„","⨖":"⨖","?":"?","≟":"≟",""":'"',""":'"',"⇛":"⇛","⇒":"⇒","⤜":"⤜","⤏":"â¤","⥤":"⥤","∽̱":"∽̱","ŕ":"Å•","√":"√","⦳":"⦳","⟩":"⟩","⦒":"⦒","⦥":"⦥","⟩":"⟩","»":"»","»":"»","→":"→","⥵":"⥵","⇥":"⇥","⤠":"⤠","⤳":"⤳","⤞":"⤞","↪":"↪","↬":"↬","⥅":"⥅","⥴":"⥴","↣":"↣","↝":"â†","⤚":"⤚","∶":"∶","ℚ":"ℚ","⤍":"â¤","❳":"â³","}":"}","]":"]","⦌":"⦌","⦎":"⦎","⦐":"â¦","ř":"Å™","ŗ":"Å—","⌉":"⌉","}":"}","р":"Ñ€","⤷":"⤷","⥩":"⥩","”":"â€","”":"â€","↳":"↳","ℜ":"ℜ","ℛ":"â„›","ℜ":"ℜ","ℝ":"â„","▭":"â–­","®":"®","®":"®","⥽":"⥽","⌋":"⌋","𝔯":"ð”¯","⇁":"â‡","⇀":"⇀","⥬":"⥬","ρ":"Ï","ϱ":"ϱ","→":"→","↣":"↣","⇁":"â‡","⇀":"⇀","⇄":"⇄","⇌":"⇌","⇉":"⇉","↝":"â†","⋌":"⋌","˚":"Ëš","≓":"≓","⇄":"⇄","⇌":"⇌","‏":"â€","⎱":"⎱","⎱":"⎱","⫮":"â«®","⟭":"⟭","⇾":"⇾","⟧":"⟧","⦆":"⦆","𝕣":"ð•£","⨮":"⨮","⨵":"⨵",")":")","⦔":"⦔","⨒":"⨒","⇉":"⇉","›":"›","𝓇":"ð“‡","↱":"↱","]":"]","’":"’","’":"’","⋌":"⋌","⋊":"⋊","▹":"â–¹","⊵":"⊵","▸":"â–¸","⧎":"â§Ž","⥨":"⥨","℞":"℞","ś":"Å›","‚":"‚","≻":"≻","⪴":"⪴","⪸":"⪸","š":"Å¡","≽":"≽","⪰":"⪰","ş":"ÅŸ","ŝ":"Å","⪶":"⪶","⪺":"⪺","⋩":"â‹©","⨓":"⨓","≿":"≿","с":"Ñ","⋅":"â‹…","⊡":"⊡","⩦":"⩦","⇘":"⇘","⤥":"⤥","↘":"↘","↘":"↘","§":"§","§":"§",";":";","⤩":"⤩","∖":"∖","∖":"∖","✶":"✶","𝔰":"ð”°","⌢":"⌢","♯":"♯","щ":"щ","ш":"ш","∣":"∣","∥":"∥","­":"­","­":"­","σ":"σ","ς":"Ï‚","ς":"Ï‚","∼":"∼","⩪":"⩪","≃":"≃","≃":"≃","⪞":"⪞","⪠":"⪠","⪝":"âª","⪟":"⪟","≆":"≆","⨤":"⨤","⥲":"⥲","←":"â†","∖":"∖","⨳":"⨳","⧤":"⧤","∣":"∣","⌣":"⌣","⪪":"⪪","⪬":"⪬","⪬︀":"⪬︀","ь":"ÑŒ","/":"/","⧄":"â§„","⌿":"⌿","𝕤":"ð•¤","♠":"â™ ","♠":"â™ ","∥":"∥","⊓":"⊓","⊓︀":"⊓︀","⊔":"⊔","⊔︀":"⊔︀","⊏":"âŠ","⊑":"⊑","⊏":"âŠ","⊑":"⊑","⊐":"âŠ","⊒":"⊒","⊐":"âŠ","⊒":"⊒","□":"â–¡","□":"â–¡","▪":"â–ª","▪":"â–ª","→":"→","𝓈":"ð“ˆ","∖":"∖","⌣":"⌣","⋆":"⋆","☆":"☆","★":"★","ϵ":"ϵ","ϕ":"Ï•","¯":"¯","⊂":"⊂","⫅":"â«…","⪽":"⪽","⊆":"⊆","⫃":"⫃","⫁":"â«","⫋":"â«‹","⊊":"⊊","⪿":"⪿","⥹":"⥹","⊂":"⊂","⊆":"⊆","⫅":"â«…","⊊":"⊊","⫋":"â«‹","⫇":"⫇","⫕":"â«•","⫓":"â«“","≻":"≻","⪸":"⪸","≽":"≽","⪰":"⪰","⪺":"⪺","⪶":"⪶","⋩":"â‹©","≿":"≿","∑":"∑","♪":"♪","¹":"¹","¹":"¹","²":"²","²":"²","³":"³","³":"³","⊃":"⊃","⫆":"⫆","⪾":"⪾","⫘":"⫘","⊇":"⊇","⫄":"â«„","⟉":"⟉","⫗":"â«—","⥻":"⥻","⫂":"â«‚","⫌":"⫌","⊋":"⊋","⫀":"â«€","⊃":"⊃","⊇":"⊇","⫆":"⫆","⊋":"⊋","⫌":"⫌","⫈":"⫈","⫔":"â«”","⫖":"â«–","⇙":"⇙","⤦":"⤦","↙":"↙","↙":"↙","⤪":"⤪","ß":"ß","ß":"ß","⌖":"⌖","τ":"Ï„","⎴":"⎴","ť":"Å¥","ţ":"Å£","т":"Ñ‚","⃛":"⃛","⌕":"⌕","𝔱":"ð”±","∴":"∴","∴":"∴","θ":"θ","ϑ":"Ï‘","ϑ":"Ï‘","≈":"≈","∼":"∼"," ":" ","≈":"≈","∼":"∼","þ":"þ","þ":"þ","˜":"Ëœ","×":"×","×":"×","⊠":"⊠","⨱":"⨱","⨰":"⨰","∭":"∭","⤨":"⤨","⊤":"⊤","⌶":"⌶","⫱":"⫱","𝕥":"ð•¥","⫚":"⫚","⤩":"⤩","‴":"‴","™":"â„¢","▵":"â–µ","▿":"â–¿","◃":"â—ƒ","⊴":"⊴","≜":"≜","▹":"â–¹","⊵":"⊵","◬":"â—¬","≜":"≜","⨺":"⨺","⨹":"⨹","⧍":"â§","⨻":"⨻","⏢":"â¢","𝓉":"ð“‰","ц":"ц","ћ":"Ñ›","ŧ":"ŧ","≬":"≬","↞":"↞","↠":"↠","⇑":"⇑","⥣":"⥣","ú":"ú","ú":"ú","↑":"↑","ў":"Ñž","ŭ":"Å­","û":"û","û":"û","у":"у","⇅":"⇅","ű":"ű","⥮":"⥮","⥾":"⥾","𝔲":"ð”²","ù":"ù","ù":"ù","↿":"↿","↾":"↾","▀":"â–€","⌜":"⌜","⌜":"⌜","⌏":"âŒ","◸":"â—¸","ū":"Å«","¨":"¨","¨":"¨","ų":"ų","𝕦":"ð•¦","↑":"↑","↕":"↕","↿":"↿","↾":"↾","⊎":"⊎","υ":"Ï…","ϒ":"Ï’","υ":"Ï…","⇈":"⇈","⌝":"âŒ","⌝":"âŒ","⌎":"⌎","ů":"ů","◹":"â—¹","𝓊":"ð“Š","⋰":"â‹°","ũ":"Å©","▵":"â–µ","▴":"â–´","⇈":"⇈","ü":"ü","ü":"ü","⦧":"⦧","⇕":"⇕","⫨":"⫨","⫩":"â«©","⊨":"⊨","⦜":"⦜","ϵ":"ϵ","ϰ":"ϰ","∅":"∅","ϕ":"Ï•","ϖ":"Ï–","∝":"âˆ","↕":"↕","ϱ":"ϱ","ς":"Ï‚","⊊︀":"⊊︀","⫋︀":"⫋︀","⊋︀":"⊋︀","⫌︀":"⫌︀","ϑ":"Ï‘","⊲":"⊲","⊳":"⊳","в":"в","⊢":"⊢","∨":"∨","⊻":"⊻","≚":"≚","⋮":"â‹®","|":"|","|":"|","𝔳":"ð”³","⊲":"⊲","⊂⃒":"⊂⃒","⊃⃒":"⊃⃒","𝕧":"ð•§","∝":"âˆ","⊳":"⊳","𝓋":"ð“‹","⫋︀":"⫋︀","⊊︀":"⊊︀","⫌︀":"⫌︀","⊋︀":"⊋︀","⦚":"⦚","ŵ":"ŵ","⩟":"⩟","∧":"∧","≙":"≙","℘":"℘","𝔴":"ð”´","𝕨":"ð•¨","℘":"℘","≀":"≀","≀":"≀","𝓌":"ð“Œ","⋂":"â‹‚","◯":"â—¯","⋃":"⋃","▽":"â–½","𝔵":"ð”µ","⟺":"⟺","⟷":"⟷","ξ":"ξ","⟸":"⟸","⟵":"⟵","⟼":"⟼","⋻":"â‹»","⨀":"⨀","𝕩":"ð•©","⨁":"â¨","⨂":"⨂","⟹":"⟹","⟶":"⟶","𝓍":"ð“","⨆":"⨆","⨄":"⨄","△":"â–³","⋁":"â‹","⋀":"â‹€","ý":"ý","ý":"ý","я":"Ñ","ŷ":"Å·","ы":"Ñ‹","¥":"Â¥","¥":"Â¥","𝔶":"ð”¶","ї":"Ñ—","𝕪":"ð•ª","𝓎":"ð“Ž","ю":"ÑŽ","ÿ":"ÿ","ÿ":"ÿ","ź":"ź","ž":"ž","з":"з","ż":"ż","ℨ":"ℨ","ζ":"ζ","𝔷":"ð”·","ж":"ж","⇝":"â‡","𝕫":"ð•«","𝓏":"ð“","‍":"â€","‌":"‌"},characters:{"Æ":"Æ","&":"&","Ã":"Á","Ä‚":"Ă","Â":"Â","Ð":"А","ð”„":"𝔄","À":"À","Α":"Α","Ä€":"Ā","â©“":"⩓","Ä„":"Ą","ð”¸":"𝔸","â¡":"⁡","Ã…":"Å","ð’œ":"𝒜","≔":"≔","Ã":"Ã","Ä":"Ä","∖":"∖","â«§":"⫧","⌆":"⌆","Б":"Б","∵":"∵","ℬ":"ℬ","Î’":"Β","ð”…":"𝔅","ð”¹":"𝔹","˘":"˘","≎":"≎","Ч":"Ч","©":"©","Ć":"Ć","â‹’":"⋒","â……":"ⅅ","â„­":"ℭ","ÄŒ":"Č","Ç":"Ç","Ĉ":"Ĉ","∰":"∰","ÄŠ":"Ċ","¸":"¸","·":"·","Χ":"Χ","⊙":"⊙","⊖":"⊖","⊕":"⊕","⊗":"⊗","∲":"∲","â€":"”","’":"’","∷":"∷","â©´":"⩴","≡":"≡","∯":"∯","∮":"∮","â„‚":"ℂ","âˆ":"∐","∳":"∳","⨯":"⨯","ð’ž":"𝒞","â‹“":"⋓","â‰":"≍","⤑":"⤑","Ђ":"Ђ","Ð…":"Ѕ","Ð":"Џ","‡":"‡","↡":"↡","⫤":"⫤","ÄŽ":"Ď","Д":"Д","∇":"∇","Δ":"Δ","ð”‡":"𝔇","´":"´","Ë™":"˙","Ë":"˝","`":"`","Ëœ":"˜","â‹„":"⋄","â…†":"ⅆ","ð”»":"𝔻","¨":"¨","⃜":"⃜","â‰":"≐","⇓":"⇓","â‡":"⇐","⇔":"⇔","⟸":"⟸","⟺":"⟺","⟹":"⟹","⇒":"⇒","⊨":"⊨","⇑":"⇑","⇕":"⇕","∥":"∥","↓":"↓","⤓":"⤓","⇵":"⇵","Ì‘":"̑","â¥":"⥐","⥞":"⥞","↽":"↽","⥖":"⥖","⥟":"⥟","â‡":"⇁","⥗":"⥗","⊤":"⊤","↧":"↧","ð’Ÿ":"𝒟","Ä":"Đ","ÅŠ":"Ŋ","Ã":"Ð","É":"É","Äš":"Ě","Ê":"Ê","Э":"Э","Ä–":"Ė","ð”ˆ":"𝔈","È":"È","∈":"∈","Ä’":"Ē","â—»":"◻","â–«":"▫","Ę":"Ę","ð”¼":"𝔼","Ε":"Ε","⩵":"⩵","≂":"≂","⇌":"⇌","â„°":"ℰ","⩳":"⩳","Η":"Η","Ë":"Ë","∃":"∃","â…‡":"ⅇ","Ф":"Ф","ð”‰":"𝔉","â—¼":"◼","â–ª":"▪","ð”½":"𝔽","∀":"∀","ℱ":"ℱ","Ѓ":"Ѓ",">":">","Γ":"Γ","Ïœ":"Ϝ","Äž":"Ğ","Ä¢":"Ģ","Äœ":"Ĝ","Г":"Г","Ä ":"Ġ","ð”Š":"𝔊","â‹™":"⋙","ð”¾":"𝔾","≥":"≥","â‹›":"⋛","≧":"≧","⪢":"⪢","≷":"≷","⩾":"⩾","≳":"≳","ð’¢":"𝒢","≫":"≫","Ъ":"Ъ","ˇ":"ˇ","^":"^","Ĥ":"Ĥ","ℌ":"ℌ","â„‹":"ℋ","â„":"ℍ","─":"─","Ħ":"Ħ","â‰":"≏","Е":"Е","IJ":"IJ","Ð":"Ё","Ã":"Í","ÃŽ":"Î","И":"И","İ":"İ","â„‘":"ℑ","ÃŒ":"Ì","Ī":"Ī","â…ˆ":"ⅈ","∬":"∬","∫":"∫","â‹‚":"⋂","â£":"⁣","â¢":"⁢","Ä®":"Į","ð•€":"𝕀","Ι":"Ι","â„":"ℐ","Ĩ":"Ĩ","І":"І","Ã":"Ï","Ä´":"Ĵ","Й":"Й","ð”":"𝔍","ð•":"𝕁","ð’¥":"𝒥","Ј":"Ј","Є":"Є","Ð¥":"Х","ÐŒ":"Ќ","Κ":"Κ","Ķ":"Ķ","К":"К","ð”Ž":"𝔎","ð•‚":"𝕂","ð’¦":"𝒦","Љ":"Љ","<":"<","Ĺ":"Ĺ","Λ":"Λ","⟪":"⟪","â„’":"ℒ","↞":"↞","Ľ":"Ľ","Ä»":"Ļ","Л":"Л","⟨":"⟨","â†":"←","⇤":"⇤","⇆":"⇆","⌈":"⌈","⟦":"⟦","⥡":"⥡","⇃":"⇃","⥙":"⥙","⌊":"⌊","↔":"↔","⥎":"⥎","⊣":"⊣","↤":"↤","⥚":"⥚","⊲":"⊲","â§":"⧏","⊴":"⊴","⥑":"⥑","⥠":"⥠","↿":"↿","⥘":"⥘","↼":"↼","⥒":"⥒","⋚":"⋚","≦":"≦","≶":"≶","⪡":"⪡","⩽":"⩽","≲":"≲","ð”":"𝔏","⋘":"⋘","⇚":"⇚","Ä¿":"Ŀ","⟵":"⟵","⟷":"⟷","⟶":"⟶","ð•ƒ":"𝕃","↙":"↙","↘":"↘","↰":"↰","Å":"Ł","≪":"≪","⤅":"⤅","М":"М","âŸ":" ","ℳ":"ℳ","ð”":"𝔐","∓":"∓","ð•„":"𝕄","Μ":"Μ","Њ":"Њ","Ń":"Ń","Ň":"Ň","Å…":"Ņ","Ð":"Н","​":"​","\n":" ","ð”‘":"𝔑","â ":"⁠"," ":" ","â„•":"ℕ","⫬":"⫬","≢":"≢","≭":"≭","∦":"∦","∉":"∉","≠":"≠","≂̸":"≂̸","∄":"∄","≯":"≯","≱":"≱","≧̸":"≧̸","≫̸":"≫̸","≹":"≹","⩾̸":"⩾̸","≵":"≵","≎̸":"≎̸","â‰Ì¸":"≏̸","⋪":"⋪","â§Ì¸":"⧏̸","⋬":"⋬","≮":"≮","≰":"≰","≸":"≸","≪̸":"≪̸","⩽̸":"⩽̸","≴":"≴","⪢̸":"⪢̸","⪡̸":"⪡̸","⊀":"⊀","⪯̸":"⪯̸","â‹ ":"⋠","∌":"∌","â‹«":"⋫","â§Ì¸":"⧐̸","â‹­":"⋭","âŠÌ¸":"⊏̸","â‹¢":"⋢","âŠÌ¸":"⊐̸","â‹£":"⋣","⊂⃒":"⊂⃒","⊈":"⊈","âŠ":"⊁","⪰̸":"⪰̸","â‹¡":"⋡","≿̸":"≿̸","⊃⃒":"⊃⃒","⊉":"⊉","â‰":"≁","≄":"≄","≇":"≇","≉":"≉","∤":"∤","ð’©":"𝒩","Ñ":"Ñ","Î":"Ν","Å’":"Œ","Ó":"Ó","Ô":"Ô","О":"О","Å":"Ő","ð”’":"𝔒","Ã’":"Ò","ÅŒ":"Ō","Ω":"Ω","Ο":"Ο","ð•†":"𝕆","“":"“","‘":"‘","â©”":"⩔","ð’ª":"𝒪","Ø":"Ø","Õ":"Õ","⨷":"⨷","Ö":"Ö","‾":"‾","âž":"⏞","⎴":"⎴","âœ":"⏜","∂":"∂","П":"П","ð”“":"𝔓","Φ":"Φ","Π":"Π","±":"±","â„™":"ℙ","⪻":"⪻","≺":"≺","⪯":"⪯","≼":"≼","≾":"≾","″":"″","âˆ":"∏","âˆ":"∝","ð’«":"𝒫","Ψ":"Ψ",'"':""","ð””":"𝔔","ℚ":"ℚ","ð’¬":"𝒬","â¤":"⤐","®":"®","Å”":"Ŕ","⟫":"⟫","↠":"↠","⤖":"⤖","Ř":"Ř","Å–":"Ŗ","Р":"Р","ℜ":"ℜ","∋":"∋","⇋":"⇋","⥯":"⥯","Ρ":"Ρ","⟩":"⟩","→":"→","⇥":"⇥","⇄":"⇄","⌉":"⌉","⟧":"⟧","â¥":"⥝","⇂":"⇂","⥕":"⥕","⌋":"⌋","⊢":"⊢","↦":"↦","⥛":"⥛","⊳":"⊳","â§":"⧐","⊵":"⊵","â¥":"⥏","⥜":"⥜","↾":"↾","⥔":"⥔","⇀":"⇀","⥓":"⥓","â„":"ℝ","⥰":"⥰","⇛":"⇛","â„›":"ℛ","↱":"↱","â§´":"⧴","Щ":"Щ","Ш":"Ш","Ь":"Ь","Åš":"Ś","⪼":"⪼","Å ":"Š","Åž":"Ş","Åœ":"Ŝ","С":"С","ð”–":"𝔖","↑":"↑","Σ":"Σ","∘":"∘","ð•Š":"𝕊","√":"√","â–¡":"□","⊓":"⊓","âŠ":"⊏","⊑":"⊑","âŠ":"⊐","⊒":"⊒","⊔":"⊔","ð’®":"𝒮","⋆":"⋆","â‹":"⋐","⊆":"⊆","≻":"≻","⪰":"⪰","≽":"≽","≿":"≿","∑":"∑","â‹‘":"⋑","⊃":"⊃","⊇":"⊇","Þ":"Þ","â„¢":"™","Ћ":"Ћ","Ц":"Ц","\t":" ","Τ":"Τ","Ť":"Ť","Å¢":"Ţ","Т":"Т","ð”—":"𝔗","∴":"∴","Θ":"Θ","âŸâ€Š":"  "," ":" ","∼":"∼","≃":"≃","≅":"≅","≈":"≈","ð•‹":"𝕋","⃛":"⃛","ð’¯":"𝒯","Ŧ":"Ŧ","Ú":"Ú","↟":"↟","⥉":"⥉","ÐŽ":"Ў","Ŭ":"Ŭ","Û":"Û","У":"У","Ű":"Ű","ð”˜":"𝔘","Ù":"Ù","Ū":"Ū",_:"_","âŸ":"⏟","⎵":"⎵","â":"⏝","⋃":"⋃","⊎":"⊎","Ų":"Ų","ð•Œ":"𝕌","⤒":"⤒","⇅":"⇅","↕":"↕","⥮":"⥮","⊥":"⊥","↥":"↥","↖":"↖","↗":"↗","Ï’":"ϒ","Î¥":"Υ","Å®":"Ů","ð’°":"𝒰","Ũ":"Ũ","Ü":"Ü","⊫":"⊫","â««":"⫫","Ð’":"В","⊩":"⊩","⫦":"⫦","â‹":"⋁","‖":"‖","∣":"∣","|":"|","â˜":"❘","≀":"≀"," ":" ","ð”™":"𝔙","ð•":"𝕍","ð’±":"𝒱","⊪":"⊪","Å´":"Ŵ","â‹€":"⋀","ð”š":"𝔚","ð•Ž":"𝕎","ð’²":"𝒲","ð”›":"𝔛","Ξ":"Ξ","ð•":"𝕏","ð’³":"𝒳","Я":"Я","Ї":"Ї","Ю":"Ю","Ã":"Ý","Ŷ":"Ŷ","Ы":"Ы","ð”œ":"𝔜","ð•":"𝕐","ð’´":"𝒴","Ÿ":"Ÿ","Ж":"Ж","Ź":"Ź","Ž":"Ž","З":"З","Å»":"Ż","Ζ":"Ζ","ℨ":"ℨ","ℤ":"ℤ","ð’µ":"𝒵","á":"á","ă":"ă","∾":"∾","∾̳":"∾̳","∿":"∿","â":"â","а":"а","æ":"æ","ð”ž":"𝔞","à":"à","ℵ":"ℵ","α":"α","Ä":"ā","⨿":"⨿","∧":"∧","â©•":"⩕","⩜":"⩜","⩘":"⩘","⩚":"⩚","∠":"∠","⦤":"⦤","∡":"∡","⦨":"⦨","⦩":"⦩","⦪":"⦪","⦫":"⦫","⦬":"⦬","⦭":"⦭","⦮":"⦮","⦯":"⦯","∟":"∟","⊾":"⊾","â¦":"⦝","∢":"∢","â¼":"⍼","Ä…":"ą","ð•’":"𝕒","â©°":"⩰","⩯":"⩯","≊":"≊","≋":"≋","'":"'","Ã¥":"å","ð’¶":"𝒶","*":"*","ã":"ã","ä":"ä","⨑":"⨑","â«­":"⫭","≌":"≌","϶":"϶","‵":"‵","∽":"∽","â‹":"⋍","⊽":"⊽","⌅":"⌅","⎶":"⎶","б":"б","„":"„","⦰":"⦰","β":"β","â„¶":"ℶ","≬":"≬","ð”Ÿ":"𝔟","â—¯":"◯","⨀":"⨀","â¨":"⨁","⨂":"⨂","⨆":"⨆","★":"★","â–½":"▽","â–³":"△","⨄":"⨄","â¤":"⤍","â§«":"⧫","â–´":"▴","â–¾":"▾","â—‚":"◂","â–¸":"▸","â£":"␣","â–’":"▒","â–‘":"░","â–“":"▓","â–ˆ":"█","=⃥":"=⃥","≡⃥":"≡⃥","âŒ":"⌐","ð•“":"𝕓","⋈":"⋈","â•—":"╗","â•”":"╔","â•–":"╖","â•“":"╓","â•":"═","╦":"╦","â•©":"╩","╤":"╤","â•§":"╧","â•":"╝","╚":"╚","╜":"╜","â•™":"╙","â•‘":"║","╬":"╬","â•£":"╣","â• ":"╠","â•«":"╫","â•¢":"╢","╟":"╟","⧉":"⧉","â••":"╕","â•’":"╒","â”":"┐","┌":"┌","â•¥":"╥","╨":"╨","┬":"┬","â”´":"┴","⊟":"⊟","⊞":"⊞","⊠":"⊠","â•›":"╛","╘":"╘","┘":"┘","â””":"└","│":"│","╪":"╪","â•¡":"╡","╞":"╞","┼":"┼","┤":"┤","├":"├","¦":"¦","ð’·":"𝒷","â":"⁏","\\":"\","â§…":"⧅","⟈":"⟈","•":"•","⪮":"⪮","ć":"ć","∩":"∩","â©„":"⩄","⩉":"⩉","â©‹":"⩋","⩇":"⩇","â©€":"⩀","∩︀":"∩︀","â":"⁁","â©":"⩍","Ä":"č","ç":"ç","ĉ":"ĉ","⩌":"⩌","â©":"⩐","Ä‹":"ċ","⦲":"⦲","¢":"¢","ð” ":"𝔠","ч":"ч","✓":"✓","χ":"χ","â—‹":"○","⧃":"⧃","ˆ":"ˆ","≗":"≗","↺":"↺","↻":"↻","Ⓢ":"Ⓢ","⊛":"⊛","⊚":"⊚","âŠ":"⊝","â¨":"⨐","⫯":"⫯","â§‚":"⧂","♣":"♣",":":":",",":",","@":"@","âˆ":"∁","â©­":"⩭","ð•”":"𝕔","â„—":"℗","↵":"↵","✗":"✗","ð’¸":"𝒸","â«":"⫏","â«‘":"⫑","â«":"⫐","â«’":"⫒","⋯":"⋯","⤸":"⤸","⤵":"⤵","⋞":"⋞","⋟":"⋟","↶":"↶","⤽":"⤽","∪":"∪","⩈":"⩈","⩆":"⩆","⩊":"⩊","âŠ":"⊍","â©…":"⩅","∪︀":"∪︀","↷":"↷","⤼":"⤼","⋎":"⋎","â‹":"⋏","¤":"¤","∱":"∱","⌭":"⌭","⥥":"⥥","†":"†","ℸ":"ℸ","â€":"‐","â¤":"⤏","Ä":"ď","д":"д","⇊":"⇊","â©·":"⩷","°":"°","δ":"δ","⦱":"⦱","⥿":"⥿","ð”¡":"𝔡","♦":"♦","Ï":"ϝ","⋲":"⋲","÷":"÷","⋇":"⋇","Ñ’":"ђ","⌞":"⌞","âŒ":"⌍",$:"$","ð••":"𝕕","≑":"≑","∸":"∸","∔":"∔","⊡":"⊡","⌟":"⌟","⌌":"⌌","ð’¹":"𝒹","Ñ•":"ѕ","â§¶":"⧶","Ä‘":"đ","⋱":"⋱","â–¿":"▿","⦦":"⦦","ÑŸ":"џ","⟿":"⟿","é":"é","â©®":"⩮","Ä›":"ě","≖":"≖","ê":"ê","≕":"≕","Ñ":"э","Ä—":"ė","≒":"≒","ð”¢":"𝔢","⪚":"⪚","è":"è","⪖":"⪖","⪘":"⪘","⪙":"⪙","â§":"⏧","â„“":"ℓ","⪕":"⪕","⪗":"⪗","Ä“":"ē","∅":"∅"," ":" "," ":" "," ":" ","Å‹":"ŋ"," ":" ","Ä™":"ę","ð•–":"𝕖","â‹•":"⋕","â§£":"⧣","⩱":"⩱","ε":"ε","ϵ":"ϵ","=":"=","≟":"≟","⩸":"⩸","â§¥":"⧥","≓":"≓","⥱":"⥱","ℯ":"ℯ","η":"η","ð":"ð","ë":"ë","€":"€","!":"!","Ñ„":"ф","♀":"♀","ffi":"ffi","ff":"ff","ffl":"ffl","ð”£":"𝔣","ï¬":"fi",fj:"fj","â™­":"♭","fl":"fl","â–±":"▱","Æ’":"ƒ","ð•—":"𝕗","â‹”":"⋔","â«™":"⫙","â¨":"⨍","½":"½","â…“":"⅓","¼":"¼","â…•":"⅕","â…™":"⅙","â…›":"⅛","â…”":"⅔","â…–":"⅖","¾":"¾","â…—":"⅗","â…œ":"⅜","â…˜":"⅘","â…š":"⅚","â…":"⅝","â…ž":"⅞","â„":"⁄","⌢":"⌢","ð’»":"𝒻","⪌":"⪌","ǵ":"ǵ","γ":"γ","⪆":"⪆","ÄŸ":"ğ","Ä":"ĝ","г":"г","Ä¡":"ġ","⪩":"⪩","⪀":"⪀","⪂":"⪂","⪄":"⪄","⋛︀":"⋛︀","⪔":"⪔","ð”¤":"𝔤","â„·":"ℷ","Ñ“":"ѓ","⪒":"⪒","⪥":"⪥","⪤":"⪤","≩":"≩","⪊":"⪊","⪈":"⪈","â‹§":"⋧","ð•˜":"𝕘","ℊ":"ℊ","⪎":"⪎","âª":"⪐","⪧":"⪧","⩺":"⩺","â‹—":"⋗","⦕":"⦕","⩼":"⩼","⥸":"⥸","≩︀":"≩︀","ÑŠ":"ъ","⥈":"⥈","↭":"↭","â„":"ℏ","Ä¥":"ĥ","♥":"♥","…":"…","⊹":"⊹","ð”¥":"𝔥","⤥":"⤥","⤦":"⤦","⇿":"⇿","∻":"∻","↩":"↩","↪":"↪","ð•™":"𝕙","―":"―","ð’½":"𝒽","ħ":"ħ","âƒ":"⁃","í":"í","î":"î","и":"и","е":"е","¡":"¡","ð”¦":"𝔦","ì":"ì","⨌":"⨌","∭":"∭","â§œ":"⧜","â„©":"℩","ij":"ij","Ä«":"ī","ı":"ı","⊷":"⊷","Ƶ":"Ƶ","â„…":"℅","∞":"∞","â§":"⧝","⊺":"⊺","⨗":"⨗","⨼":"⨼","Ñ‘":"ё","į":"į","ð•š":"𝕚","ι":"ι","¿":"¿","ð’¾":"𝒾","⋹":"⋹","⋵":"⋵","â‹´":"⋴","⋳":"⋳","Ä©":"ĩ","Ñ–":"і","ï":"ï","ĵ":"ĵ","й":"й","ð”§":"𝔧","È·":"ȷ","ð•›":"𝕛","ð’¿":"𝒿","ј":"ј","Ñ”":"є","κ":"κ","ϰ":"ϰ","Ä·":"ķ","к":"к","ð”¨":"𝔨","ĸ":"ĸ","Ñ…":"х","Ñœ":"ќ","ð•œ":"𝕜","ð“€":"𝓀","⤛":"⤛","⤎":"⤎","⪋":"⪋","⥢":"⥢","ĺ":"ĺ","⦴":"⦴","λ":"λ","⦑":"⦑","⪅":"⪅","«":"«","⤟":"⤟","â¤":"⤝","↫":"↫","⤹":"⤹","⥳":"⥳","↢":"↢","⪫":"⪫","⤙":"⤙","⪭":"⪭","⪭︀":"⪭︀","⤌":"⤌","â²":"❲","{":"{","[":"[","⦋":"⦋","â¦":"⦏","â¦":"⦍","ľ":"ľ","ļ":"ļ","л":"л","⤶":"⤶","⥧":"⥧","⥋":"⥋","↲":"↲","≤":"≤","⇇":"⇇","â‹‹":"⋋","⪨":"⪨","â©¿":"⩿","âª":"⪁","⪃":"⪃","⋚︀":"⋚︀","⪓":"⪓","â‹–":"⋖","⥼":"⥼","ð”©":"𝔩","⪑":"⪑","⥪":"⥪","â–„":"▄","Ñ™":"љ","⥫":"⥫","â—º":"◺","Å€":"ŀ","⎰":"⎰","≨":"≨","⪉":"⪉","⪇":"⪇","⋦":"⋦","⟬":"⟬","⇽":"⇽","⟼":"⟼","↬":"↬","⦅":"⦅","ð•":"𝕝","⨭":"⨭","⨴":"⨴","∗":"∗","â—Š":"◊","(":"(","⦓":"⦓","⥭":"⥭","‎":"‎","⊿":"⊿","‹":"‹","ð“":"𝓁","âª":"⪍","âª":"⪏","‚":"‚","Å‚":"ł","⪦":"⪦","⩹":"⩹","⋉":"⋉","⥶":"⥶","â©»":"⩻","⦖":"⦖","â—ƒ":"◃","⥊":"⥊","⥦":"⥦","≨︀":"≨︀","∺":"∺","¯":"¯","♂":"♂","✠":"✠","â–®":"▮","⨩":"⨩","м":"м","—":"—","ð”ª":"𝔪","â„§":"℧","µ":"µ","â«°":"⫰","−":"−","⨪":"⨪","â«›":"⫛","⊧":"⊧","ð•ž":"𝕞","ð“‚":"𝓂","μ":"μ","⊸":"⊸","⋙̸":"⋙̸","≫⃒":"≫⃒","â‡":"⇍","⇎":"⇎","⋘̸":"⋘̸","≪⃒":"≪⃒","â‡":"⇏","⊯":"⊯","⊮":"⊮","Å„":"ń","∠⃒":"∠⃒","⩰̸":"⩰̸","≋̸":"≋̸","ʼn":"ʼn","â™®":"♮","⩃":"⩃","ň":"ň","ņ":"ņ","⩭̸":"⩭̸","â©‚":"⩂","н":"н","–":"–","⇗":"⇗","⤤":"⤤","â‰Ì¸":"≐̸","⤨":"⤨","ð”«":"𝔫","↮":"↮","⫲":"⫲","⋼":"⋼","⋺":"⋺","Ñš":"њ","≦̸":"≦̸","↚":"↚","‥":"‥","ð•Ÿ":"𝕟","¬":"¬","⋹̸":"⋹̸","⋵̸":"⋵̸","â‹·":"⋷","â‹¶":"⋶","⋾":"⋾","⋽":"⋽","⫽⃥":"⫽⃥","∂̸":"∂̸","⨔":"⨔","↛":"↛","⤳̸":"⤳̸","â†Ì¸":"↝̸","ð“ƒ":"𝓃","⊄":"⊄","⫅̸":"⫅̸","⊅":"⊅","⫆̸":"⫆̸","ñ":"ñ","ν":"ν","#":"#","â„–":"№"," ":" ","⊭":"⊭","⤄":"⤄","â‰âƒ’":"≍⃒","⊬":"⊬","≥⃒":"≥⃒",">⃒":">⃒","â§ž":"⧞","⤂":"⤂","≤⃒":"≤⃒","<⃒":"<⃒","⊴⃒":"⊴⃒","⤃":"⤃","⊵⃒":"⊵⃒","∼⃒":"∼⃒","⇖":"⇖","⤣":"⤣","⤧":"⤧","ó":"ó","ô":"ô","о":"о","Å‘":"ő","⨸":"⨸","⦼":"⦼","Å“":"œ","⦿":"⦿","ð”¬":"𝔬","Ë›":"˛","ò":"ò","â§":"⧁","⦵":"⦵","⦾":"⦾","⦻":"⦻","â§€":"⧀","Å":"ō","ω":"ω","ο":"ο","⦶":"⦶","ð• ":"𝕠","⦷":"⦷","⦹":"⦹","∨":"∨","â©":"⩝","â„´":"ℴ","ª":"ª","º":"º","⊶":"⊶","â©–":"⩖","â©—":"⩗","â©›":"⩛","ø":"ø","⊘":"⊘","õ":"õ","⨶":"⨶","ö":"ö","⌽":"⌽","¶":"¶","⫳":"⫳","⫽":"⫽","п":"п","%":"%",".":".","‰":"‰","‱":"‱","ð”­":"𝔭","φ":"φ","Ï•":"ϕ","☎":"☎","Ï€":"π","Ï–":"ϖ","ℎ":"ℎ","+":"+","⨣":"⨣","⨢":"⨢","⨥":"⨥","⩲":"⩲","⨦":"⨦","⨧":"⨧","⨕":"⨕","ð•¡":"𝕡","£":"£","⪳":"⪳","⪷":"⪷","⪹":"⪹","⪵":"⪵","⋨":"⋨","′":"′","⌮":"⌮","⌒":"⌒","⌓":"⌓","⊰":"⊰","ð“…":"𝓅","ψ":"ψ"," ":" ","ð”®":"𝔮","ð•¢":"𝕢","â—":"⁗","ð“†":"𝓆","⨖":"⨖","?":"?","⤜":"⤜","⥤":"⥤","∽̱":"∽̱","Å•":"ŕ","⦳":"⦳","⦒":"⦒","⦥":"⦥","»":"»","⥵":"⥵","⤠":"⤠","⤳":"⤳","⤞":"⤞","⥅":"⥅","⥴":"⥴","↣":"↣","â†":"↝","⤚":"⤚","∶":"∶","â³":"❳","}":"}","]":"]","⦌":"⦌","⦎":"⦎","â¦":"⦐","Å™":"ř","Å—":"ŗ","Ñ€":"р","⤷":"⤷","⥩":"⥩","↳":"↳","â–­":"▭","⥽":"⥽","ð”¯":"𝔯","⥬":"⥬","Ï":"ρ","ϱ":"ϱ","⇉":"⇉","⋌":"⋌","Ëš":"˚","â€":"‏","⎱":"⎱","â«®":"⫮","⟭":"⟭","⇾":"⇾","⦆":"⦆","ð•£":"𝕣","⨮":"⨮","⨵":"⨵",")":")","⦔":"⦔","⨒":"⨒","›":"›","ð“‡":"𝓇","⋊":"⋊","â–¹":"▹","â§Ž":"⧎","⥨":"⥨","℞":"℞","Å›":"ś","⪴":"⪴","⪸":"⪸","Å¡":"š","ÅŸ":"ş","Å":"ŝ","⪶":"⪶","⪺":"⪺","â‹©":"⋩","⨓":"⨓","Ñ":"с","â‹…":"⋅","⩦":"⩦","⇘":"⇘","§":"§",";":";","⤩":"⤩","✶":"✶","ð”°":"𝔰","♯":"♯","щ":"щ","ш":"ш","­":"­","σ":"σ","Ï‚":"ς","⩪":"⩪","⪞":"⪞","⪠":"⪠","âª":"⪝","⪟":"⪟","≆":"≆","⨤":"⨤","⥲":"⥲","⨳":"⨳","⧤":"⧤","⌣":"⌣","⪪":"⪪","⪬":"⪬","⪬︀":"⪬︀","ÑŒ":"ь","/":"/","â§„":"⧄","⌿":"⌿","ð•¤":"𝕤","â™ ":"♠","⊓︀":"⊓︀","⊔︀":"⊔︀","ð“ˆ":"𝓈","☆":"☆","⊂":"⊂","â«…":"⫅","⪽":"⪽","⫃":"⫃","â«":"⫁","â«‹":"⫋","⊊":"⊊","⪿":"⪿","⥹":"⥹","⫇":"⫇","â«•":"⫕","â«“":"⫓","♪":"♪","¹":"¹","²":"²","³":"³","⫆":"⫆","⪾":"⪾","⫘":"⫘","â«„":"⫄","⟉":"⟉","â«—":"⫗","⥻":"⥻","â«‚":"⫂","⫌":"⫌","⊋":"⊋","â«€":"⫀","⫈":"⫈","â«”":"⫔","â«–":"⫖","⇙":"⇙","⤪":"⤪","ß":"ß","⌖":"⌖","Ï„":"τ","Å¥":"ť","Å£":"ţ","Ñ‚":"т","⌕":"⌕","ð”±":"𝔱","θ":"θ","Ï‘":"ϑ","þ":"þ","×":"×","⨱":"⨱","⨰":"⨰","⌶":"⌶","⫱":"⫱","ð•¥":"𝕥","⫚":"⫚","‴":"‴","â–µ":"▵","≜":"≜","â—¬":"◬","⨺":"⨺","⨹":"⨹","â§":"⧍","⨻":"⨻","â¢":"⏢","ð“‰":"𝓉","ц":"ц","Ñ›":"ћ","ŧ":"ŧ","⥣":"⥣","ú":"ú","Ñž":"ў","Å­":"ŭ","û":"û","у":"у","ű":"ű","⥾":"⥾","ð”²":"𝔲","ù":"ù","â–€":"▀","⌜":"⌜","âŒ":"⌏","â—¸":"◸","Å«":"ū","ų":"ų","ð•¦":"𝕦","Ï…":"υ","⇈":"⇈","âŒ":"⌝","⌎":"⌎","ů":"ů","â—¹":"◹","ð“Š":"𝓊","â‹°":"⋰","Å©":"ũ","ü":"ü","⦧":"⦧","⫨":"⫨","â«©":"⫩","⦜":"⦜","⊊︀":"⊊︀","⫋︀":"⫋︀","⊋︀":"⊋︀","⫌︀":"⫌︀","в":"в","⊻":"⊻","≚":"≚","â‹®":"⋮","ð”³":"𝔳","ð•§":"𝕧","ð“‹":"𝓋","⦚":"⦚","ŵ":"ŵ","⩟":"⩟","≙":"≙","℘":"℘","ð”´":"𝔴","ð•¨":"𝕨","ð“Œ":"𝓌","ð”µ":"𝔵","ξ":"ξ","â‹»":"⋻","ð•©":"𝕩","ð“":"𝓍","ý":"ý","Ñ":"я","Å·":"ŷ","Ñ‹":"ы","Â¥":"¥","ð”¶":"𝔶","Ñ—":"ї","ð•ª":"𝕪","ð“Ž":"𝓎","ÑŽ":"ю","ÿ":"ÿ","ź":"ź","ž":"ž","з":"з","ż":"ż","ζ":"ζ","ð”·":"𝔷","ж":"ж","â‡":"⇝","ð•«":"𝕫","ð“":"𝓏","â€":"‍","‌":"‌"}}}; - -/***/ }), - -/***/ "./node_modules/html-entities/lib/numeric-unicode-map.js": -/*!***************************************************************!*\ - !*** ./node_modules/html-entities/lib/numeric-unicode-map.js ***! - \***************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.numericUnicodeMap={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376}; - -/***/ }), - -/***/ "./node_modules/html-entities/lib/surrogate-pairs.js": -/*!***********************************************************!*\ - !*** ./node_modules/html-entities/lib/surrogate-pairs.js ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.fromCodePoint=String.fromCodePoint||function(astralCodePoint){return String.fromCharCode(Math.floor((astralCodePoint-65536)/1024)+55296,(astralCodePoint-65536)%1024+56320)};exports.getCodePoint=String.prototype.codePointAt?function(input,position){return input.codePointAt(position)}:function(input,position){return(input.charCodeAt(position)-55296)*1024+input.charCodeAt(position+1)-56320+65536};exports.highSurrogateFrom=55296;exports.highSurrogateTo=56319; - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js": -/*!***************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/clients/WebSocketClient.js ***! - \***************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": function() { return /* binding */ WebSocketClient; } -/* harmony export */ }); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } - - - -var WebSocketClient = /*#__PURE__*/function () { - /** - * @param {string} url - */ - function WebSocketClient(url) { - _classCallCheck(this, WebSocketClient); - - this.client = new WebSocket(url); - - this.client.onerror = function (error) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_0__.log.error(error); - }; - } - /** - * @param {(...args: any[]) => void} f - */ - - - _createClass(WebSocketClient, [{ - key: "onOpen", - value: function onOpen(f) { - this.client.onopen = f; - } - /** - * @param {(...args: any[]) => void} f - */ - - }, { - key: "onClose", - value: function onClose(f) { - this.client.onclose = f; - } // call f with the message string as the first argument - - /** - * @param {(...args: any[]) => void} f - */ - - }, { - key: "onMessage", - value: function onMessage(f) { - this.client.onmessage = function (e) { - f(e.data); - }; - } - }]); - - return WebSocketClient; -}(); - - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/index.js?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10": -/*!**********************************************************************************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/index.js?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10 ***! - \**********************************************************************************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -var __resourceQuery = "?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! webpack/hot/log.js */ "./node_modules/webpack/hot/log.js"); -/* harmony import */ var webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/stripAnsi.js */ "./node_modules/webpack-dev-server/client/utils/stripAnsi.js"); -/* harmony import */ var _utils_parseURL_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/parseURL.js */ "./node_modules/webpack-dev-server/client/utils/parseURL.js"); -/* harmony import */ var _socket_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./socket.js */ "./node_modules/webpack-dev-server/client/socket.js"); -/* harmony import */ var _overlay_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./overlay.js */ "./node_modules/webpack-dev-server/client/overlay.js"); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -/* harmony import */ var _utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/sendMessage.js */ "./node_modules/webpack-dev-server/client/utils/sendMessage.js"); -/* harmony import */ var _utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/reloadApp.js */ "./node_modules/webpack-dev-server/client/utils/reloadApp.js"); -/* harmony import */ var _utils_createSocketURL_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/createSocketURL.js */ "./node_modules/webpack-dev-server/client/utils/createSocketURL.js"); -/* global __resourceQuery, __webpack_hash__ */ -/// - - - - - - - - - -/** - * @typedef {Object} Options - * @property {boolean} hot - * @property {boolean} liveReload - * @property {boolean} progress - * @property {boolean | { warnings?: boolean, errors?: boolean, trustedTypesPolicyName?: string }} overlay - * @property {string} [logging] - * @property {number} [reconnect] - */ - -/** - * @typedef {Object} Status - * @property {boolean} isUnloading - * @property {string} currentHash - * @property {string} [previousHash] - */ - -/** - * @type {Status} - */ - -var status = { - isUnloading: false, - // TODO Workaround for webpack v4, `__webpack_hash__` is not replaced without HotModuleReplacement - // eslint-disable-next-line camelcase - currentHash: true ? __webpack_require__.h() : 0 -}; -/** @type {Options} */ - -var options = { - hot: false, - liveReload: false, - progress: false, - overlay: false -}; -var parsedResourceQuery = (0,_utils_parseURL_js__WEBPACK_IMPORTED_MODULE_2__["default"])(__resourceQuery); - -if (parsedResourceQuery.hot === "true") { - options.hot = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Hot Module Replacement enabled."); -} - -if (parsedResourceQuery["live-reload"] === "true") { - options.liveReload = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Live Reloading enabled."); -} - -if (parsedResourceQuery.logging) { - options.logging = parsedResourceQuery.logging; -} - -if (typeof parsedResourceQuery.reconnect !== "undefined") { - options.reconnect = Number(parsedResourceQuery.reconnect); -} -/** - * @param {string} level - */ - - -function setAllLogLevel(level) { - // This is needed because the HMR logger operate separately from dev server logger - webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0___default().setLogLevel(level === "verbose" || level === "log" ? "info" : level); - (0,_utils_log_js__WEBPACK_IMPORTED_MODULE_5__.setLogLevel)(level); -} - -if (options.logging) { - setAllLogLevel(options.logging); -} - -self.addEventListener("beforeunload", function () { - status.isUnloading = true; -}); -var onSocketMessage = { - hot: function hot() { - if (parsedResourceQuery.hot === "false") { - return; - } - - options.hot = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Hot Module Replacement enabled."); - }, - liveReload: function liveReload() { - if (parsedResourceQuery["live-reload"] === "false") { - return; - } - - options.liveReload = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Live Reloading enabled."); - }, - invalid: function invalid() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("App updated. Recompiling..."); // Fixes #1042. overlay doesn't clear if errors are fixed but warnings remain. - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Invalid"); - }, - - /** - * @param {string} hash - */ - hash: function hash(_hash) { - status.previousHash = status.currentHash; - status.currentHash = _hash; - }, - logging: setAllLogLevel, - - /** - * @param {boolean} value - */ - overlay: function overlay(value) { - if (typeof document === "undefined") { - return; - } - - options.overlay = value; - }, - - /** - * @param {number} value - */ - reconnect: function reconnect(value) { - if (parsedResourceQuery.reconnect === "false") { - return; - } - - options.reconnect = value; - }, - - /** - * @param {boolean} value - */ - progress: function progress(value) { - options.progress = value; - }, - - /** - * @param {{ pluginName?: string, percent: number, msg: string }} data - */ - "progress-update": function progressUpdate(data) { - if (options.progress) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(data.pluginName ? "[".concat(data.pluginName, "] ") : "").concat(data.percent, "% - ").concat(data.msg, ".")); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Progress", data); - }, - "still-ok": function stillOk() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Nothing changed."); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("StillOk"); - }, - ok: function ok() { - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Ok"); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__["default"])(options, status); - }, - // TODO: remove in v5 in favor of 'static-changed' - - /** - * @param {string} file - */ - "content-changed": function contentChanged(file) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(file ? "\"".concat(file, "\"") : "Content", " from static directory was changed. Reloading...")); - self.location.reload(); - }, - - /** - * @param {string} file - */ - "static-changed": function staticChanged(file) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(file ? "\"".concat(file, "\"") : "Content", " from static directory was changed. Reloading...")); - self.location.reload(); - }, - - /** - * @param {Error[]} warnings - * @param {any} params - */ - warnings: function warnings(_warnings, params) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.warn("Warnings while compiling."); - - var printableWarnings = _warnings.map(function (error) { - var _formatProblem = (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.formatProblem)("warning", error), - header = _formatProblem.header, - body = _formatProblem.body; - - return "".concat(header, "\n").concat((0,_utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__["default"])(body)); - }); - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Warnings", printableWarnings); - - for (var i = 0; i < printableWarnings.length; i++) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.warn(printableWarnings[i]); - } - - var needShowOverlayForWarnings = typeof options.overlay === "boolean" ? options.overlay : options.overlay && options.overlay.warnings; - - if (needShowOverlayForWarnings) { - var trustedTypesPolicyName = typeof options.overlay === "object" && options.overlay.trustedTypesPolicyName; - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.show)("warning", _warnings, trustedTypesPolicyName || null); - } - - if (params && params.preventReloading) { - return; - } - - (0,_utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__["default"])(options, status); - }, - - /** - * @param {Error[]} errors - */ - errors: function errors(_errors) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error("Errors while compiling. Reload prevented."); - - var printableErrors = _errors.map(function (error) { - var _formatProblem2 = (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.formatProblem)("error", error), - header = _formatProblem2.header, - body = _formatProblem2.body; - - return "".concat(header, "\n").concat((0,_utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__["default"])(body)); - }); - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Errors", printableErrors); - - for (var i = 0; i < printableErrors.length; i++) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error(printableErrors[i]); - } - - var needShowOverlayForErrors = typeof options.overlay === "boolean" ? options.overlay : options.overlay && options.overlay.errors; - - if (needShowOverlayForErrors) { - var trustedTypesPolicyName = typeof options.overlay === "object" && options.overlay.trustedTypesPolicyName; - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.show)("error", _errors, trustedTypesPolicyName || null); - } - }, - - /** - * @param {Error} error - */ - error: function error(_error) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error(_error); - }, - close: function close() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Disconnected!"); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Close"); - } -}; -var socketURL = (0,_utils_createSocketURL_js__WEBPACK_IMPORTED_MODULE_8__["default"])(parsedResourceQuery); -(0,_socket_js__WEBPACK_IMPORTED_MODULE_3__["default"])(socketURL, onSocketMessage, options.reconnect); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/modules/logger/index.js": -/*!************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/modules/logger/index.js ***! - \************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -/******/ (function() { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./client-src/modules/logger/SyncBailHookFake.js": -/*!*******************************************************!*\ - !*** ./client-src/modules/logger/SyncBailHookFake.js ***! - \*******************************************************/ -/***/ (function(module) { - - -/** - * Client stub for tapable SyncBailHook - */ - -module.exports = function clientTapableSyncBailHook() { - return { - call: function call() {} - }; -}; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/Logger.js": -/*!****************************************************!*\ - !*** ./node_modules/webpack/lib/logging/Logger.js ***! - \****************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _iterableToArray(iter) { - if (typeof (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }) !== "undefined" && iter[(typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }).iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) { - arr2[i] = arr[i]; - } - - return arr2; -} - -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} - -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); - return Constructor; -} - -var LogType = Object.freeze({ - error: - /** @type {"error"} */ - "error", - // message, c style arguments - warn: - /** @type {"warn"} */ - "warn", - // message, c style arguments - info: - /** @type {"info"} */ - "info", - // message, c style arguments - log: - /** @type {"log"} */ - "log", - // message, c style arguments - debug: - /** @type {"debug"} */ - "debug", - // message, c style arguments - trace: - /** @type {"trace"} */ - "trace", - // no arguments - group: - /** @type {"group"} */ - "group", - // [label] - groupCollapsed: - /** @type {"groupCollapsed"} */ - "groupCollapsed", - // [label] - groupEnd: - /** @type {"groupEnd"} */ - "groupEnd", - // [label] - profile: - /** @type {"profile"} */ - "profile", - // [profileName] - profileEnd: - /** @type {"profileEnd"} */ - "profileEnd", - // [profileName] - time: - /** @type {"time"} */ - "time", - // name, time as [seconds, nanoseconds] - clear: - /** @type {"clear"} */ - "clear", - // no arguments - status: - /** @type {"status"} */ - "status" // message, arguments - -}); -exports.LogType = LogType; -/** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */ - -var LOG_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger raw log method"); -var TIMERS_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger times"); -var TIMERS_AGGREGATES_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger aggregated times"); - -var WebpackLogger = /*#__PURE__*/function () { - /** - * @param {function(LogTypeEnum, any[]=): void} log log function - * @param {function(string | function(): string): WebpackLogger} getChildLogger function to create child logger - */ - function WebpackLogger(log, getChildLogger) { - _classCallCheck(this, WebpackLogger); - - this[LOG_SYMBOL] = log; - this.getChildLogger = getChildLogger; - } - - _createClass(WebpackLogger, [{ - key: "error", - value: function error() { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - this[LOG_SYMBOL](LogType.error, args); - } - }, { - key: "warn", - value: function warn() { - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - this[LOG_SYMBOL](LogType.warn, args); - } - }, { - key: "info", - value: function info() { - for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - this[LOG_SYMBOL](LogType.info, args); - } - }, { - key: "log", - value: function log() { - for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - args[_key4] = arguments[_key4]; - } - - this[LOG_SYMBOL](LogType.log, args); - } - }, { - key: "debug", - value: function debug() { - for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - args[_key5] = arguments[_key5]; - } - - this[LOG_SYMBOL](LogType.debug, args); - } - }, { - key: "assert", - value: function assert(assertion) { - if (!assertion) { - for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) { - args[_key6 - 1] = arguments[_key6]; - } - - this[LOG_SYMBOL](LogType.error, args); - } - } - }, { - key: "trace", - value: function trace() { - this[LOG_SYMBOL](LogType.trace, ["Trace"]); - } - }, { - key: "clear", - value: function clear() { - this[LOG_SYMBOL](LogType.clear); - } - }, { - key: "status", - value: function status() { - for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { - args[_key7] = arguments[_key7]; - } - - this[LOG_SYMBOL](LogType.status, args); - } - }, { - key: "group", - value: function group() { - for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) { - args[_key8] = arguments[_key8]; - } - - this[LOG_SYMBOL](LogType.group, args); - } - }, { - key: "groupCollapsed", - value: function groupCollapsed() { - for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) { - args[_key9] = arguments[_key9]; - } - - this[LOG_SYMBOL](LogType.groupCollapsed, args); - } - }, { - key: "groupEnd", - value: function groupEnd() { - for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) { - args[_key10] = arguments[_key10]; - } - - this[LOG_SYMBOL](LogType.groupEnd, args); - } - }, { - key: "profile", - value: function profile(label) { - this[LOG_SYMBOL](LogType.profile, [label]); - } - }, { - key: "profileEnd", - value: function profileEnd(label) { - this[LOG_SYMBOL](LogType.profileEnd, [label]); - } - }, { - key: "time", - value: function time(label) { - this[TIMERS_SYMBOL] = this[TIMERS_SYMBOL] || new Map(); - this[TIMERS_SYMBOL].set(label, process.hrtime()); - } - }, { - key: "timeLog", - value: function timeLog(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeLog()")); - } - - var time = process.hrtime(prev); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }, { - key: "timeEnd", - value: function timeEnd(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeEnd()")); - } - - var time = process.hrtime(prev); - this[TIMERS_SYMBOL].delete(label); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }, { - key: "timeAggregate", - value: function timeAggregate(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeAggregate()")); - } - - var time = process.hrtime(prev); - this[TIMERS_SYMBOL].delete(label); - this[TIMERS_AGGREGATES_SYMBOL] = this[TIMERS_AGGREGATES_SYMBOL] || new Map(); - var current = this[TIMERS_AGGREGATES_SYMBOL].get(label); - - if (current !== undefined) { - if (time[1] + current[1] > 1e9) { - time[0] += current[0] + 1; - time[1] = time[1] - 1e9 + current[1]; - } else { - time[0] += current[0]; - time[1] += current[1]; - } - } - - this[TIMERS_AGGREGATES_SYMBOL].set(label, time); - } - }, { - key: "timeAggregateEnd", - value: function timeAggregateEnd(label) { - if (this[TIMERS_AGGREGATES_SYMBOL] === undefined) return; - var time = this[TIMERS_AGGREGATES_SYMBOL].get(label); - if (time === undefined) return; - this[TIMERS_AGGREGATES_SYMBOL].delete(label); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }]); - - return WebpackLogger; -}(); - -exports.Logger = WebpackLogger; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/createConsoleLogger.js": -/*!*****************************************************************!*\ - !*** ./node_modules/webpack/lib/logging/createConsoleLogger.js ***! - \*****************************************************************/ -/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_10785__) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _iterableToArray(iter) { - if (typeof (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }) !== "undefined" && iter[(typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }).iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) { - arr2[i] = arr[i]; - } - - return arr2; -} - -var _require = __nested_webpack_require_10785__(/*! ./Logger */ "./node_modules/webpack/lib/logging/Logger.js"), - LogType = _require.LogType; -/** @typedef {import("../../declarations/WebpackOptions").FilterItemTypes} FilterItemTypes */ - -/** @typedef {import("../../declarations/WebpackOptions").FilterTypes} FilterTypes */ - -/** @typedef {import("./Logger").LogTypeEnum} LogTypeEnum */ - -/** @typedef {function(string): boolean} FilterFunction */ - -/** - * @typedef {Object} LoggerConsole - * @property {function(): void} clear - * @property {function(): void} trace - * @property {(...args: any[]) => void} info - * @property {(...args: any[]) => void} log - * @property {(...args: any[]) => void} warn - * @property {(...args: any[]) => void} error - * @property {(...args: any[]) => void=} debug - * @property {(...args: any[]) => void=} group - * @property {(...args: any[]) => void=} groupCollapsed - * @property {(...args: any[]) => void=} groupEnd - * @property {(...args: any[]) => void=} status - * @property {(...args: any[]) => void=} profile - * @property {(...args: any[]) => void=} profileEnd - * @property {(...args: any[]) => void=} logTime - */ - -/** - * @typedef {Object} LoggerOptions - * @property {false|true|"none"|"error"|"warn"|"info"|"log"|"verbose"} level loglevel - * @property {FilterTypes|boolean} debug filter for debug logging - * @property {LoggerConsole} console the console to log to - */ - -/** - * @param {FilterItemTypes} item an input item - * @returns {FilterFunction} filter function - */ - - -var filterToFunction = function filterToFunction(item) { - if (typeof item === "string") { - var regExp = new RegExp("[\\\\/]".concat(item.replace( // eslint-disable-next-line no-useless-escape - /[-[\]{}()*+?.\\^$|]/g, "\\$&"), "([\\\\/]|$|!|\\?)")); - return function (ident) { - return regExp.test(ident); - }; - } - - if (item && typeof item === "object" && typeof item.test === "function") { - return function (ident) { - return item.test(ident); - }; - } - - if (typeof item === "function") { - return item; - } - - if (typeof item === "boolean") { - return function () { - return item; - }; - } -}; -/** - * @enum {number} - */ - - -var LogLevel = { - none: 6, - false: 6, - error: 5, - warn: 4, - info: 3, - log: 2, - true: 2, - verbose: 1 -}; -/** - * @param {LoggerOptions} options options object - * @returns {function(string, LogTypeEnum, any[]): void} logging function - */ - -module.exports = function (_ref) { - var _ref$level = _ref.level, - level = _ref$level === void 0 ? "info" : _ref$level, - _ref$debug = _ref.debug, - debug = _ref$debug === void 0 ? false : _ref$debug, - console = _ref.console; - var debugFilters = typeof debug === "boolean" ? [function () { - return debug; - }] : - /** @type {FilterItemTypes[]} */ - [].concat(debug).map(filterToFunction); - /** @type {number} */ - - var loglevel = LogLevel["".concat(level)] || 0; - /** - * @param {string} name name of the logger - * @param {LogTypeEnum} type type of the log entry - * @param {any[]} args arguments of the log entry - * @returns {void} - */ - - var logger = function logger(name, type, args) { - var labeledArgs = function labeledArgs() { - if (Array.isArray(args)) { - if (args.length > 0 && typeof args[0] === "string") { - return ["[".concat(name, "] ").concat(args[0])].concat(_toConsumableArray(args.slice(1))); - } else { - return ["[".concat(name, "]")].concat(_toConsumableArray(args)); - } - } else { - return []; - } - }; - - var debug = debugFilters.some(function (f) { - return f(name); - }); - - switch (type) { - case LogType.debug: - if (!debug) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.debug === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.debug.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.log: - if (!debug && loglevel > LogLevel.log) return; - console.log.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.info: - if (!debug && loglevel > LogLevel.info) return; - console.info.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.warn: - if (!debug && loglevel > LogLevel.warn) return; - console.warn.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.error: - if (!debug && loglevel > LogLevel.error) return; - console.error.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.trace: - if (!debug) return; - console.trace(); - break; - - case LogType.groupCollapsed: - if (!debug && loglevel > LogLevel.log) return; - - if (!debug && loglevel > LogLevel.verbose) { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.groupCollapsed === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.groupCollapsed.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - } - - // falls through - - case LogType.group: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.group === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.group.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.groupEnd: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.groupEnd === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.groupEnd(); - } - - break; - - case LogType.time: - { - if (!debug && loglevel > LogLevel.log) return; - var ms = args[1] * 1000 + args[2] / 1000000; - var msg = "[".concat(name, "] ").concat(args[0], ": ").concat(ms, " ms"); - - if (typeof console.logTime === "function") { - console.logTime(msg); - } else { - console.log(msg); - } - - break; - } - - case LogType.profile: - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.profile === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.profile.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.profileEnd: - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.profileEnd === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.profileEnd.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.clear: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.clear === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.clear(); - } - - break; - - case LogType.status: - if (!debug && loglevel > LogLevel.info) return; - - if (typeof console.status === "function") { - if (args.length === 0) { - console.status(); - } else { - console.status.apply(console, _toConsumableArray(labeledArgs())); - } - } else { - if (args.length !== 0) { - console.info.apply(console, _toConsumableArray(labeledArgs())); - } - } - - break; - - default: - throw new Error("Unexpected LogType ".concat(type)); - } - }; - - return logger; -}; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/runtime.js": -/*!*****************************************************!*\ - !*** ./node_modules/webpack/lib/logging/runtime.js ***! - \*****************************************************/ -/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_20872__) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _extends() { - _extends = Object.assign ? Object.assign.bind() : function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - return _extends.apply(this, arguments); -} - -var SyncBailHook = __nested_webpack_require_20872__(/*! tapable/lib/SyncBailHook */ "./client-src/modules/logger/SyncBailHookFake.js"); - -var _require = __nested_webpack_require_20872__(/*! ./Logger */ "./node_modules/webpack/lib/logging/Logger.js"), - Logger = _require.Logger; - -var createConsoleLogger = __nested_webpack_require_20872__(/*! ./createConsoleLogger */ "./node_modules/webpack/lib/logging/createConsoleLogger.js"); -/** @type {createConsoleLogger.LoggerOptions} */ - - -var currentDefaultLoggerOptions = { - level: "info", - debug: false, - console: console -}; -var currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions); -/** - * @param {string} name name of the logger - * @returns {Logger} a logger - */ - -exports.getLogger = function (name) { - return new Logger(function (type, args) { - if (exports.hooks.log.call(name, type, args) === undefined) { - currentDefaultLogger(name, type, args); - } - }, function (childName) { - return exports.getLogger("".concat(name, "/").concat(childName)); - }); -}; -/** - * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options - * @returns {void} - */ - - -exports.configureDefaultLogger = function (options) { - _extends(currentDefaultLoggerOptions, options); - - currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions); -}; - -exports.hooks = { - log: new SyncBailHook(["origin", "type", "args"]) -}; - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __nested_webpack_require_23009__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __nested_webpack_require_23009__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ !function() { -/******/ // define getter functions for harmony exports -/******/ __nested_webpack_require_23009__.d = function(exports, definition) { -/******/ for(var key in definition) { -/******/ if(__nested_webpack_require_23009__.o(definition, key) && !__nested_webpack_require_23009__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ !function() { -/******/ __nested_webpack_require_23009__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -/******/ }(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ !function() { -/******/ // define __esModule on exports -/******/ __nested_webpack_require_23009__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ }(); -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. -!function() { -/*!********************************************!*\ - !*** ./client-src/modules/logger/index.js ***! - \********************************************/ -__nested_webpack_require_23009__.r(__webpack_exports__); -/* harmony export */ __nested_webpack_require_23009__.d(__webpack_exports__, { -/* harmony export */ "default": function() { return /* reexport default export from named module */ webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__; } -/* harmony export */ }); -/* harmony import */ var webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_23009__(/*! webpack/lib/logging/runtime.js */ "./node_modules/webpack/lib/logging/runtime.js"); - -}(); -var __webpack_export_target__ = exports; -for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i]; -if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true }); -/******/ })() -; - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/overlay.js": -/*!***********************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/overlay.js ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "formatProblem": function() { return /* binding */ formatProblem; }, -/* harmony export */ "hide": function() { return /* binding */ hide; }, -/* harmony export */ "show": function() { return /* binding */ show; } -/* harmony export */ }); -/* harmony import */ var ansi_html_community__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ansi-html-community */ "./node_modules/ansi-html-community/index.js"); -/* harmony import */ var ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(ansi_html_community__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! html-entities */ "./node_modules/html-entities/lib/index.js"); -/* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(html_entities__WEBPACK_IMPORTED_MODULE_1__); -// The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app) -// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware). - - -var colors = { - reset: ["transparent", "transparent"], - black: "181818", - red: "E36049", - green: "B3CB74", - yellow: "FFD080", - blue: "7CAFC2", - magenta: "7FACCA", - cyan: "C3C2EF", - lightgrey: "EBE7E3", - darkgrey: "6D7891" -}; -/** @type {HTMLIFrameElement | null | undefined} */ - -var iframeContainerElement; -/** @type {HTMLDivElement | null | undefined} */ - -var containerElement; -/** @type {Array<(element: HTMLDivElement) => void>} */ - -var onLoadQueue = []; -/** @type {TrustedTypePolicy | undefined} */ - -var overlayTrustedTypesPolicy; -ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default().setColors(colors); -/** - * @param {string | null} trustedTypesPolicyName - */ - -function createContainer(trustedTypesPolicyName) { - // Enable Trusted Types if they are available in the current browser. - if (window.trustedTypes) { - overlayTrustedTypesPolicy = window.trustedTypes.createPolicy(trustedTypesPolicyName || "webpack-dev-server#overlay", { - createHTML: function createHTML(value) { - return value; - } - }); - } - - iframeContainerElement = document.createElement("iframe"); - iframeContainerElement.id = "webpack-dev-server-client-overlay"; - iframeContainerElement.src = "about:blank"; - iframeContainerElement.style.position = "fixed"; - iframeContainerElement.style.left = 0; - iframeContainerElement.style.top = 0; - iframeContainerElement.style.right = 0; - iframeContainerElement.style.bottom = 0; - iframeContainerElement.style.width = "100vw"; - iframeContainerElement.style.height = "100vh"; - iframeContainerElement.style.border = "none"; - iframeContainerElement.style.zIndex = 9999999999; - - iframeContainerElement.onload = function () { - containerElement = - /** @type {Document} */ - - /** @type {HTMLIFrameElement} */ - iframeContainerElement.contentDocument.createElement("div"); - containerElement.id = "webpack-dev-server-client-overlay-div"; - containerElement.style.position = "fixed"; - containerElement.style.boxSizing = "border-box"; - containerElement.style.left = 0; - containerElement.style.top = 0; - containerElement.style.right = 0; - containerElement.style.bottom = 0; - containerElement.style.width = "100vw"; - containerElement.style.height = "100vh"; - containerElement.style.backgroundColor = "rgba(0, 0, 0, 0.85)"; - containerElement.style.color = "#E8E8E8"; - containerElement.style.fontFamily = "Menlo, Consolas, monospace"; - containerElement.style.fontSize = "large"; - containerElement.style.padding = "2rem"; - containerElement.style.lineHeight = "1.2"; - containerElement.style.whiteSpace = "pre-wrap"; - containerElement.style.overflow = "auto"; - var headerElement = document.createElement("span"); - headerElement.innerText = "Compiled with problems:"; - var closeButtonElement = document.createElement("button"); - closeButtonElement.innerText = "X"; - closeButtonElement.style.background = "transparent"; - closeButtonElement.style.border = "none"; - closeButtonElement.style.fontSize = "20px"; - closeButtonElement.style.fontWeight = "bold"; - closeButtonElement.style.color = "white"; - closeButtonElement.style.cursor = "pointer"; - closeButtonElement.style.cssFloat = "right"; // @ts-ignore - - closeButtonElement.style.styleFloat = "right"; - closeButtonElement.addEventListener("click", function () { - hide(); - }); - containerElement.appendChild(headerElement); - containerElement.appendChild(closeButtonElement); - containerElement.appendChild(document.createElement("br")); - containerElement.appendChild(document.createElement("br")); - /** @type {Document} */ - - /** @type {HTMLIFrameElement} */ - iframeContainerElement.contentDocument.body.appendChild(containerElement); - onLoadQueue.forEach(function (onLoad) { - onLoad( - /** @type {HTMLDivElement} */ - containerElement); - }); - onLoadQueue = []; - /** @type {HTMLIFrameElement} */ - - iframeContainerElement.onload = null; - }; - - document.body.appendChild(iframeContainerElement); -} -/** - * @param {(element: HTMLDivElement) => void} callback - * @param {string | null} trustedTypesPolicyName - */ - - -function ensureOverlayExists(callback, trustedTypesPolicyName) { - if (containerElement) { - // Everything is ready, call the callback right away. - callback(containerElement); - return; - } - - onLoadQueue.push(callback); - - if (iframeContainerElement) { - return; - } - - createContainer(trustedTypesPolicyName); -} // Successful compilation. - - -function hide() { - if (!iframeContainerElement) { - return; - } // Clean up and reset internal state. - - - document.body.removeChild(iframeContainerElement); - iframeContainerElement = null; - containerElement = null; -} -/** - * @param {string} type - * @param {string | { file?: string, moduleName?: string, loc?: string, message?: string }} item - * @returns {{ header: string, body: string }} - */ - - -function formatProblem(type, item) { - var header = type === "warning" ? "WARNING" : "ERROR"; - var body = ""; - - if (typeof item === "string") { - body += item; - } else { - var file = item.file || ""; // eslint-disable-next-line no-nested-ternary - - var moduleName = item.moduleName ? item.moduleName.indexOf("!") !== -1 ? "".concat(item.moduleName.replace(/^(\s|\S)*!/, ""), " (").concat(item.moduleName, ")") : "".concat(item.moduleName) : ""; - var loc = item.loc; - header += "".concat(moduleName || file ? " in ".concat(moduleName ? "".concat(moduleName).concat(file ? " (".concat(file, ")") : "") : file).concat(loc ? " ".concat(loc) : "") : ""); - body += item.message || ""; - } - - return { - header: header, - body: body - }; -} // Compilation with errors (e.g. syntax error or missing modules). - -/** - * @param {string} type - * @param {Array} messages - * @param {string | null} trustedTypesPolicyName - */ - - -function show(type, messages, trustedTypesPolicyName) { - ensureOverlayExists(function () { - messages.forEach(function (message) { - var entryElement = document.createElement("div"); - var typeElement = document.createElement("span"); - - var _formatProblem = formatProblem(type, message), - header = _formatProblem.header, - body = _formatProblem.body; - - typeElement.innerText = header; - typeElement.style.color = "#".concat(colors.red); // Make it look similar to our terminal. - - var text = ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default()((0,html_entities__WEBPACK_IMPORTED_MODULE_1__.encode)(body)); - var messageTextNode = document.createElement("div"); - messageTextNode.innerHTML = overlayTrustedTypesPolicy ? overlayTrustedTypesPolicy.createHTML(text) : text; - entryElement.appendChild(typeElement); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(messageTextNode); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(document.createElement("br")); - /** @type {HTMLDivElement} */ - - containerElement.appendChild(entryElement); - }); - }, trustedTypesPolicyName); -} - - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/socket.js": -/*!**********************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/socket.js ***! - \**********************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "client": function() { return /* binding */ client; } -/* harmony export */ }); -/* harmony import */ var _clients_WebSocketClient_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clients/WebSocketClient.js */ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js"); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -/* provided dependency */ var __webpack_dev_server_client__ = __webpack_require__(/*! ./node_modules/webpack-dev-server/client/clients/WebSocketClient.js */ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js"); -/* global __webpack_dev_server_client__ */ - - // this WebsocketClient is here as a default fallback, in case the client is not injected - -/* eslint-disable camelcase */ - -var Client = // eslint-disable-next-line no-nested-ternary -typeof __webpack_dev_server_client__ !== "undefined" ? typeof __webpack_dev_server_client__.default !== "undefined" ? __webpack_dev_server_client__.default : __webpack_dev_server_client__ : _clients_WebSocketClient_js__WEBPACK_IMPORTED_MODULE_0__["default"]; -/* eslint-enable camelcase */ - -var retries = 0; -var maxRetries = 10; // Initialized client is exported so external consumers can utilize the same instance -// It is mutable to enforce singleton -// eslint-disable-next-line import/no-mutable-exports - -var client = null; -/** - * @param {string} url - * @param {{ [handler: string]: (data?: any, params?: any) => any }} handlers - * @param {number} [reconnect] - */ - -var socket = function initSocket(url, handlers, reconnect) { - client = new Client(url); - client.onOpen(function () { - retries = 0; - - if (typeof reconnect !== "undefined") { - maxRetries = reconnect; - } - }); - client.onClose(function () { - if (retries === 0) { - handlers.close(); - } // Try to reconnect. - - - client = null; // After 10 retries stop trying, to prevent logspam. - - if (retries < maxRetries) { - // Exponentially increase timeout to reconnect. - // Respectfully copied from the package `got`. - // eslint-disable-next-line no-restricted-properties - var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100; - retries += 1; - _utils_log_js__WEBPACK_IMPORTED_MODULE_1__.log.info("Trying to reconnect..."); - setTimeout(function () { - socket(url, handlers, reconnect); - }, retryInMs); - } - }); - client.onMessage( - /** - * @param {any} data - */ - function (data) { - var message = JSON.parse(data); - - if (handlers[message.type]) { - handlers[message.type](message.data, message.params); - } - }); -}; - -/* harmony default export */ __webpack_exports__["default"] = (socket); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/createSocketURL.js": -/*!*************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/createSocketURL.js ***! - \*************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/** - * @param {{ protocol?: string, auth?: string, hostname?: string, port?: string, pathname?: string, search?: string, hash?: string, slashes?: boolean }} objURL - * @returns {string} - */ -function format(objURL) { - var protocol = objURL.protocol || ""; - - if (protocol && protocol.substr(-1) !== ":") { - protocol += ":"; - } - - var auth = objURL.auth || ""; - - if (auth) { - auth = encodeURIComponent(auth); - auth = auth.replace(/%3A/i, ":"); - auth += "@"; - } - - var host = ""; - - if (objURL.hostname) { - host = auth + (objURL.hostname.indexOf(":") === -1 ? objURL.hostname : "[".concat(objURL.hostname, "]")); - - if (objURL.port) { - host += ":".concat(objURL.port); - } - } - - var pathname = objURL.pathname || ""; - - if (objURL.slashes) { - host = "//".concat(host || ""); - - if (pathname && pathname.charAt(0) !== "/") { - pathname = "/".concat(pathname); - } - } else if (!host) { - host = ""; - } - - var search = objURL.search || ""; - - if (search && search.charAt(0) !== "?") { - search = "?".concat(search); - } - - var hash = objURL.hash || ""; - - if (hash && hash.charAt(0) !== "#") { - hash = "#".concat(hash); - } - - pathname = pathname.replace(/[?#]/g, - /** - * @param {string} match - * @returns {string} - */ - function (match) { - return encodeURIComponent(match); - }); - search = search.replace("#", "%23"); - return "".concat(protocol).concat(host).concat(pathname).concat(search).concat(hash); -} -/** - * @param {URL & { fromCurrentScript?: boolean }} parsedURL - * @returns {string} - */ - - -function createSocketURL(parsedURL) { - var hostname = parsedURL.hostname; // Node.js module parses it as `::` - // `new URL(urlString, [baseURLString])` parses it as '[::]' - - var isInAddrAny = hostname === "0.0.0.0" || hostname === "::" || hostname === "[::]"; // why do we need this check? - // hostname n/a for file protocol (example, when using electron, ionic) - // see: https://github.com/webpack/webpack-dev-server/pull/384 - - if (isInAddrAny && self.location.hostname && self.location.protocol.indexOf("http") === 0) { - hostname = self.location.hostname; - } - - var socketURLProtocol = parsedURL.protocol || self.location.protocol; // When https is used in the app, secure web sockets are always necessary because the browser doesn't accept non-secure web sockets. - - if (socketURLProtocol === "auto:" || hostname && isInAddrAny && self.location.protocol === "https:") { - socketURLProtocol = self.location.protocol; - } - - socketURLProtocol = socketURLProtocol.replace(/^(?:http|.+-extension|file)/i, "ws"); - var socketURLAuth = ""; // `new URL(urlString, [baseURLstring])` doesn't have `auth` property - // Parse authentication credentials in case we need them - - if (parsedURL.username) { - socketURLAuth = parsedURL.username; // Since HTTP basic authentication does not allow empty username, - // we only include password if the username is not empty. - - if (parsedURL.password) { - // Result: : - socketURLAuth = socketURLAuth.concat(":", parsedURL.password); - } - } // In case the host is a raw IPv6 address, it can be enclosed in - // the brackets as the brackets are needed in the final URL string. - // Need to remove those as url.format blindly adds its own set of brackets - // if the host string contains colons. That would lead to non-working - // double brackets (e.g. [[::]]) host - // - // All of these web socket url params are optionally passed in through resourceQuery, - // so we need to fall back to the default if they are not provided - - - var socketURLHostname = (hostname || self.location.hostname || "localhost").replace(/^\[(.*)\]$/, "$1"); - var socketURLPort = parsedURL.port; - - if (!socketURLPort || socketURLPort === "0") { - socketURLPort = self.location.port; - } // If path is provided it'll be passed in via the resourceQuery as a - // query param so it has to be parsed out of the querystring in order for the - // client to open the socket to the correct location. - - - var socketURLPathname = "/ws"; - - if (parsedURL.pathname && !parsedURL.fromCurrentScript) { - socketURLPathname = parsedURL.pathname; - } - - return format({ - protocol: socketURLProtocol, - auth: socketURLAuth, - hostname: socketURLHostname, - port: socketURLPort, - pathname: socketURLPathname, - slashes: true - }); -} - -/* harmony default export */ __webpack_exports__["default"] = (createSocketURL); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js": -/*!********************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js ***! - \********************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/** - * @returns {string} - */ -function getCurrentScriptSource() { - // `document.currentScript` is the most accurate way to find the current script, - // but is not supported in all browsers. - if (document.currentScript) { - return document.currentScript.getAttribute("src"); - } // Fallback to getting all scripts running in the document. - - - var scriptElements = document.scripts || []; - var scriptElementsWithSrc = Array.prototype.filter.call(scriptElements, function (element) { - return element.getAttribute("src"); - }); - - if (scriptElementsWithSrc.length > 0) { - var currentScript = scriptElementsWithSrc[scriptElementsWithSrc.length - 1]; - return currentScript.getAttribute("src"); - } // Fail as there was no script to use. - - - throw new Error("[webpack-dev-server] Failed to get current script source."); -} - -/* harmony default export */ __webpack_exports__["default"] = (getCurrentScriptSource); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/log.js": -/*!*************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/log.js ***! - \*************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "log": function() { return /* binding */ log; }, -/* harmony export */ "setLogLevel": function() { return /* binding */ setLogLevel; } -/* harmony export */ }); -/* harmony import */ var _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modules/logger/index.js */ "./node_modules/webpack-dev-server/client/modules/logger/index.js"); -/* harmony import */ var _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0__); - -var name = "webpack-dev-server"; // default level is set on the client side, so it does not need -// to be set by the CLI or API - -var defaultLevel = "info"; // options new options, merge with old options - -/** - * @param {false | true | "none" | "error" | "warn" | "info" | "log" | "verbose"} level - * @returns {void} - */ - -function setLogLevel(level) { - _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default().configureDefaultLogger({ - level: level - }); -} - -setLogLevel(defaultLevel); -var log = _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default().getLogger(name); - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/parseURL.js": -/*!******************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/parseURL.js ***! - \******************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _getCurrentScriptSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getCurrentScriptSource.js */ "./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js"); - -/** - * @param {string} resourceQuery - * @returns {{ [key: string]: string | boolean }} - */ - -function parseURL(resourceQuery) { - /** @type {{ [key: string]: string }} */ - var options = {}; - - if (typeof resourceQuery === "string" && resourceQuery !== "") { - var searchParams = resourceQuery.slice(1).split("&"); - - for (var i = 0; i < searchParams.length; i++) { - var pair = searchParams[i].split("="); - options[pair[0]] = decodeURIComponent(pair[1]); - } - } else { - // Else, get the url from the
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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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/vendor.css b/dist/vendor.css new file mode 100644 index 000000000..767cb2bff --- /dev/null +++ b/dist/vendor.css @@ -0,0 +1 @@ +.leaflet-toolbar-0{list-style:none;padding-left:0;border:2px solid rgba(0,0,0,.2);border-radius:4px}.leaflet-toolbar-0>li{position:relative}.leaflet-toolbar-0>li>.leaflet-toolbar-icon{display:block;width:30px;height:30px;line-height:30px;margin-right:0;padding-right:0;border-right:0;text-align:center;text-decoration:none;background-color:#fff}.leaflet-toolbar-0>li>.leaflet-toolbar-icon:hover{background-color:#f4f4f4}.leaflet-toolbar-0 .leaflet-toolbar-1{display:none;list-style:none}.leaflet-toolbar-tip-container{margin:-16px auto 0;height:16px;position:relative;overflow:hidden}.leaflet-toolbar-tip{width:16px;height:16px;margin:-8px auto 0;background-color:#fff;border:2px solid rgba(0,0,0,.2);background-clip:content-box;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);border-radius:4px}.leaflet-control-toolbar .leaflet-toolbar-1>li:last-child>.leaflet-toolbar-icon,.leaflet-popup-toolbar>li:last-child>.leaflet-toolbar-icon{border-top-right-radius:4px;border-bottom-right-radius:4px}.leaflet-control-toolbar>li>.leaflet-toolbar-icon{border-bottom:1px solid #ccc}.leaflet-control-toolbar>li:first-child>.leaflet-toolbar-icon{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-control-toolbar>li:last-child>.leaflet-toolbar-icon{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom-width:0}.leaflet-control-toolbar .leaflet-toolbar-1{margin:0;padding:0;position:absolute;left:30px;top:0;white-space:nowrap;height:30px}.leaflet-control-toolbar .leaflet-toolbar-1>li{display:inline-block}.leaflet-control-toolbar .leaflet-toolbar-1>li>.leaflet-toolbar-icon{display:block;background-color:#919187;border-left:1px solid #aaa;color:#fff;font:11px/19px "Helvetica Neue",Arial,Helvetica,sans-serif;line-height:30px;text-decoration:none;padding-left:10px;padding-right:10px;height:30px}.leaflet-control-toolbar .leaflet-toolbar-1>li>.leaflet-toolbar-icon:hover{background-color:#a0a098}.leaflet-popup-toolbar{position:relative;box-sizing:content-box}.leaflet-popup-toolbar>li{float:left}.leaflet-popup-toolbar>li>.leaflet-toolbar-icon{border-right:1px solid #ccc}.leaflet-popup-toolbar>li:first-child>.leaflet-toolbar-icon{border-top-left-radius:4px;border-bottom-left-radius:4px}.leaflet-popup-toolbar>li:last-child>.leaflet-toolbar-icon{border-bottom-width:0;border-right:none}.leaflet-popup-toolbar .leaflet-toolbar-1{position:absolute;top:30px;left:0;padding-left:0}.leaflet-popup-toolbar .leaflet-toolbar-1>li>.leaflet-toolbar-icon{position:relative;float:left;width:30px;height:30px} \ No newline at end of file diff --git a/dist/vendor.js b/dist/vendor.js new file mode 100644 index 000000000..c23deeffa --- /dev/null +++ b/dist/vendor.js @@ -0,0 +1 @@ +function dataURItoBlob(t){for(var e=(0<=t.split(",")[0].indexOf("base64")?atob:unescape)(t.split(",")[1]),r=(t=t.split(",")[0].split(":")[1].split(";")[0],new Uint8Array(e.length)),o=0;o0.0){color.rgb=(color.rgb-0.5)/(1.0-contrast)+0.5;}else{color.rgb=(color.rgb-0.5)*(1.0+contrast)+0.5;}gl_FragColor=color;}"),a.call(this,N.brightnessContrast,{brightness:t(-1,e,1),contrast:t(-1,r,1)}),this}function b(e){e=new f(e);for(var r=[],o=0;o<256;o++)r.push(t(0,Math.floor(256*e.interpolate(o/255)),255));return r}function y(t,e,r){t=b(t),1==arguments.length?e=r=t:(e=b(e),r=b(r));for(var o=[],i=0;i<256;i++)o.splice(o.length,0,t[i],e[i],r[i],255);return this._.extraTexture.initFromBytes(256,1,o),this._.extraTexture.use(1),N.curves=N.curves||new j(null,"uniform sampler2D texture;uniform sampler2D map;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);color.r=texture2D(map,vec2(color.r)).r;color.g=texture2D(map,vec2(color.g)).g;color.b=texture2D(map,vec2(color.b)).b;gl_FragColor=color;}"),N.curves.textures({map:1}),a.call(this,N.curves,{}),this}function _(t,e){return N.unsharpMask=N.unsharpMask||new j(null,"uniform sampler2D blurredTexture;uniform sampler2D originalTexture;uniform float strength;uniform float threshold;varying vec2 texCoord;void main(){vec4 blurred=texture2D(blurredTexture,texCoord);vec4 original=texture2D(originalTexture,texCoord);gl_FragColor=mix(blurred,original,1.0+strength);}"),this._.extraTexture.ensureFormat(this._.texture),this._.texture.use(),this._.extraTexture.drawTo((function(){j.getDefaultShader().drawRect()})),this._.extraTexture.use(1),this.triangleBlur(t),N.unsharpMask.textures({originalTexture:1}),a.call(this,N.unsharpMask,{strength:e}),this._.extraTexture.unuse(1),this}function T(e){return N.sepia=N.sepia||new j(null,"uniform sampler2D texture;uniform float amount;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);float r=color.r;float g=color.g;float b=color.b;color.r=min(1.0,(r*(1.0-(0.607*amount)))+(g*(0.769*amount))+(b*(0.189*amount)));color.g=min(1.0,(r*0.349*amount)+(g*(1.0-(0.314*amount)))+(b*0.168*amount));color.b=min(1.0,(r*0.272*amount)+(g*0.534*amount)+(b*(1.0-(0.869*amount))));gl_FragColor=color;}"),a.call(this,N.sepia,{amount:t(0,e,1)}),this}function w(e,r){return N.hueSaturation=N.hueSaturation||new j(null,"uniform sampler2D texture;uniform float hue;uniform float saturation;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);float angle=hue*3.14159265;float s=sin(angle),c=cos(angle);vec3 weights=(vec3(2.0*c,-sqrt(3.0)*s-c,sqrt(3.0)*s-c)+1.0)/3.0;float len=length(color.rgb);color.rgb=vec3(dot(color.rgb,weights.xyz),dot(color.rgb,weights.zxy),dot(color.rgb,weights.yzx));float average=(color.r+color.g+color.b)/3.0;if(saturation>0.0){color.rgb+=(average-color.rgb)*(1.0-1.0/(1.001-saturation));}else{color.rgb+=(average-color.rgb)*(-saturation);}gl_FragColor=color;}"),a.call(this,N.hueSaturation,{hue:t(-1,e,1),saturation:t(-1,r,1)}),this}function S(t,e,r){return N.zoomBlur=N.zoomBlur||new j(null,"uniform sampler2D texture;uniform vec2 center;uniform float strength;uniform vec2 texSize;varying vec2 texCoord;"+q+"void main(){vec4 color=vec4(0.0);float total=0.0;vec2 toCenter=center-texCoord*texSize;float offset=random(vec3(12.9898,78.233,151.7182),0.0);for(float t=0.0;t<=40.0;t++){float percent=(t+offset)/40.0;float weight=4.0*(percent-percent*percent);vec4 sample=texture2D(texture,texCoord+toCenter*percent*strength/texSize);sample.rgb*=sample.a;color+=sample*weight;total+=weight;}gl_FragColor=color/total;gl_FragColor.rgb/=gl_FragColor.a+0.00001;}"),a.call(this,N.zoomBlur,{center:[t,e],strength:r,texSize:[this.width,this.height]}),this}function C(t,e,r,o,i,n){N.tiltShift=N.tiltShift||new j(null,"uniform sampler2D texture;uniform float blurRadius;uniform float gradientRadius;uniform vec2 start;uniform vec2 end;uniform vec2 delta;uniform vec2 texSize;varying vec2 texCoord;"+q+"void main(){vec4 color=vec4(0.0);float total=0.0;float offset=random(vec3(12.9898,78.233,151.7182),0.0);vec2 normal=normalize(vec2(start.y-end.y,end.x-start.x));float radius=smoothstep(0.0,1.0,abs(dot(texCoord*texSize-start,normal))/gradientRadius)*blurRadius;for(float t=-30.0;t<=30.0;t++){float percent=(t+offset-0.5)/30.0;float weight=1.0-abs(percent);vec4 sample=texture2D(texture,texCoord+delta/texSize*percent*radius);sample.rgb*=sample.a;color+=sample*weight;total+=weight;}gl_FragColor=color/total;gl_FragColor.rgb/=gl_FragColor.a+0.00001;}");var l=r-t,s=o-e,c=Math.sqrt(l*l+s*s);return a.call(this,N.tiltShift,{blurRadius:i,gradientRadius:n,start:[t,e],end:[r,o],delta:[l/c,s/c],texSize:[this.width,this.height]}),a.call(this,N.tiltShift,{blurRadius:i,gradientRadius:n,start:[t,e],end:[r,o],delta:[-s/c,l/c],texSize:[this.width,this.height]}),this}function E(e,r,o){N.lensBlurPrePass=N.lensBlurPrePass||new j(null,"uniform sampler2D texture;uniform float power;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);color=pow(color,vec4(power));gl_FragColor=vec4(color);}");var i="uniform sampler2D texture0;uniform sampler2D texture1;uniform vec2 delta0;uniform vec2 delta1;uniform float power;varying vec2 texCoord;"+q+"vec4 sample(vec2 delta){float offset=random(vec3(delta,151.7182),0.0);vec4 color=vec4(0.0);float total=0.0;for(float t=0.0;t<=30.0;t++){float percent=(t+offset)/30.0;color+=texture2D(texture0,texCoord+delta*percent);total+=1.0;}return color/total;}";N.lensBlur0=N.lensBlur0||new j(null,i+"void main(){gl_FragColor=sample(delta0);}"),N.lensBlur1=N.lensBlur1||new j(null,i+"void main(){gl_FragColor=(sample(delta0)+sample(delta1))*0.5;}"),N.lensBlur2=N.lensBlur2||new j(null,i+"void main(){vec4 color=(sample(delta0)+2.0*texture2D(texture1,texCoord))/3.0;gl_FragColor=pow(color,vec4(power));}").textures({texture1:1}),i=[];for(var n=0;n<3;n++){var l=o+2*n*Math.PI/3;i.push([e*Math.sin(l)/this.width,e*Math.cos(l)/this.height])}return e=Math.pow(10,t(-1,r,1)),a.call(this,N.lensBlurPrePass,{power:e}),this._.extraTexture.ensureFormat(this._.texture),a.call(this,N.lensBlur0,{delta0:i[0]},this._.texture,this._.extraTexture),a.call(this,N.lensBlur1,{delta0:i[1],delta1:i[2]},this._.extraTexture,this._.extraTexture),a.call(this,N.lensBlur0,{delta0:i[1]}),this._.extraTexture.use(1),a.call(this,N.lensBlur2,{power:1/e,delta0:i[2]}),this}function D(t){return N.triangleBlur=N.triangleBlur||new j(null,"uniform sampler2D texture;uniform vec2 delta;varying vec2 texCoord;"+q+"void main(){vec4 color=vec4(0.0);float total=0.0;float offset=random(vec3(12.9898,78.233,151.7182),0.0);for(float t=-30.0;t<=30.0;t++){float percent=(t+offset-0.5)/30.0;float weight=1.0-abs(percent);vec4 sample=texture2D(texture,texCoord+delta*percent);sample.rgb*=sample.a;color+=sample*weight;total+=weight;}gl_FragColor=color/total;gl_FragColor.rgb/=gl_FragColor.a+0.00001;}"),a.call(this,N.triangleBlur,{delta:[t/this.width,0]}),a.call(this,N.triangleBlur,{delta:[0,t/this.height]}),this}function R(t){return N.edgeWork1=N.edgeWork1||new j(null,"uniform sampler2D texture;uniform vec2 delta;varying vec2 texCoord;"+q+"void main(){vec2 color=vec2(0.0);vec2 total=vec2(0.0);float offset=random(vec3(12.9898,78.233,151.7182),0.0);for(float t=-30.0;t<=30.0;t++){float percent=(t+offset-0.5)/30.0;float weight=1.0-abs(percent);vec3 sample=texture2D(texture,texCoord+delta*percent).rgb;float average=(sample.r+sample.g+sample.b)/3.0;color.x+=average*weight;total.x+=weight;if(abs(t)<15.0){weight=weight*2.0-1.0;color.y+=average*weight;total.y+=weight;}}gl_FragColor=vec4(color/total,0.0,1.0);}"),N.edgeWork2=N.edgeWork2||new j(null,"uniform sampler2D texture;uniform vec2 delta;varying vec2 texCoord;"+q+"void main(){vec2 color=vec2(0.0);vec2 total=vec2(0.0);float offset=random(vec3(12.9898,78.233,151.7182),0.0);for(float t=-30.0;t<=30.0;t++){float percent=(t+offset-0.5)/30.0;float weight=1.0-abs(percent);vec2 sample=texture2D(texture,texCoord+delta*percent).xy;color.x+=sample.x*weight;total.x+=weight;if(abs(t)<15.0){weight=weight*2.0-1.0;color.y+=sample.y*weight;total.y+=weight;}}float c=clamp(10000.0*(color.y/total.y-color.x/total.x)+0.5,0.0,1.0);gl_FragColor=vec4(c,c,c,1.0);}"),a.call(this,N.edgeWork1,{delta:[t/this.width,0]}),a.call(this,N.edgeWork2,{delta:[0,t/this.height]}),this}function F(t,e,r){return N.hexagonalPixelate=N.hexagonalPixelate||new j(null,"uniform sampler2D texture;uniform vec2 center;uniform float scale;uniform vec2 texSize;varying vec2 texCoord;void main(){vec2 tex=(texCoord*texSize-center)/scale;tex.y/=0.866025404;tex.x-=tex.y*0.5;vec2 a;if(tex.x+tex.y-floor(tex.x)-floor(tex.y)<1.0)a=vec2(floor(tex.x),floor(tex.y));else a=vec2(ceil(tex.x),ceil(tex.y));vec2 b=vec2(ceil(tex.x),floor(tex.y));vec2 c=vec2(floor(tex.x),ceil(tex.y));vec3 TEX=vec3(tex.x,tex.y,1.0-tex.x-tex.y);vec3 A=vec3(a.x,a.y,1.0-a.x-a.y);vec3 B=vec3(b.x,b.y,1.0-b.x-b.y);vec3 C=vec3(c.x,c.y,1.0-c.x-c.y);float alen=length(TEX-A);float blen=length(TEX-B);float clen=length(TEX-C);vec2 choice;if(alen0.0){coord*=mix(1.0,smoothstep(0.0,radius/distance,percent),strength*0.75);}else{coord*=mix(1.0,pow(percent,1.0+strength*0.75)*radius/distance,1.0-percent);}}coord+=center;"),a.call(this,N.bulgePinch,{radius:o,strength:t(-1,i,1),center:[e,r],texSize:[this.width,this.height]}),this}function G(t,e){return e=u.apply(null,e),t=u.apply(null,t),e=h(e),this.matrixWarp([e[0]*t[0]+e[1]*t[3]+e[2]*t[6],e[0]*t[1]+e[1]*t[4]+e[2]*t[7],e[0]*t[2]+e[1]*t[5]+e[2]*t[8],e[3]*t[0]+e[4]*t[3]+e[5]*t[6],e[3]*t[1]+e[4]*t[4]+e[5]*t[7],e[3]*t[2]+e[4]*t[5]+e[5]*t[8],e[6]*t[0]+e[7]*t[3]+e[8]*t[6],e[6]*t[1]+e[7]*t[4]+e[8]*t[7],e[6]*t[2]+e[7]*t[5]+e[8]*t[8]])}var M,k,N,O={};function X(){}try{var z=document.createElement("canvas").getContext("experimental-webgl")}catch(O){}z&&-1===z.getSupportedExtensions().indexOf("OES_texture_float_linear")&&function(t){var e,r,o,i;if(t.getExtension("OES_texture_float"))return e=t.createFramebuffer(),r=t.createTexture(),t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,1,1,0,t.RGBA,t.UNSIGNED_BYTE,null),t.bindFramebuffer(t.FRAMEBUFFER,e),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r,0),e=t.createTexture(),t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,2,2,0,t.RGBA,t.FLOAT,new Float32Array([2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])),r=t.createProgram(),o=t.createShader(t.VERTEX_SHADER),i=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(o,"attribute vec2 vertex;void main(){gl_Position=vec4(vertex,0.0,1.0);}"),t.shaderSource(i,"uniform sampler2D texture;void main(){gl_FragColor=texture2D(texture,vec2(0.5));}"),t.compileShader(o),t.compileShader(i),t.attachShader(r,o),t.attachShader(r,i),t.linkProgram(r),o=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,o),t.bufferData(t.ARRAY_BUFFER,new Float32Array([0,0]),t.STREAM_DRAW),t.enableVertexAttribArray(0),t.vertexAttribPointer(0,2,t.FLOAT,!1,0,0),o=new Uint8Array(4),t.useProgram(r),t.viewport(0,0,1,1),t.bindTexture(t.TEXTURE_2D,e),t.drawArrays(t.POINTS,0,1),t.readPixels(0,0,1,1,t.RGBA,t.UNSIGNED_BYTE,o),127===o[0]||128===o[0]}(z)&&(M=WebGLRenderingContext.prototype.getExtension,k=WebGLRenderingContext.prototype.getSupportedExtensions,WebGLRenderingContext.prototype.getExtension=function(t){return"OES_texture_float_linear"===t?(void 0===this.$OES_texture_float_linear$&&Object.defineProperty(this,"$OES_texture_float_linear$",{enumerable:!1,configurable:!1,writable:!1,value:new X}),this.$OES_texture_float_linear$):M.call(this,t)},WebGLRenderingContext.prototype.getSupportedExtensions=function(){var t=k.call(this);return-1===t.indexOf("OES_texture_float_linear")&&t.push("OES_texture_float_linear"),t}),O.canvas=function(){var t=document.createElement("canvas");try{N=t.getContext("experimental-webgl",{premultipliedAlpha:!1})}catch(t){N=null}if(N)return t._={gl:N,isInitialized:!1,texture:null,spareTexture:null,flippedShader:null},t.texture=c(r),t.draw=c(o),t.update=c(i),t.replace=c(n),t.contents=c(l),t.getPixelArray=c(s),t.brightnessContrast=c(v),t.hexagonalPixelate=c(F),t.hueSaturation=c(w),t.colorHalftone=c(A),t.triangleBlur=c(D),t.unsharpMask=c(_),t.perspective=c(G),t.matrixWarp=c(L),t.bulgePinch=c(B),t.tiltShift=c(C),t.dotScreen=c(U),t.edgeWork=c(R),t.lensBlur=c(E),t.zoomBlur=c(S),t.noise=c(m),t.denoise=c(x),t.curves=c(y),t.swirl=c(I),t.ink=c(P),t.vignette=c(p),t.vibrance=c(g),t.sepia=c(T),t;throw"This browser does not support WebGL"},O.splineInterpolate=b,Y.fromElement=function(t){var e=new Y(0,0,N.RGBA,N.UNSIGNED_BYTE);return e.loadContentsOf(t),e},Y.prototype.loadContentsOf=function(t){this.width=t.width||t.videoWidth,this.height=t.height||t.videoHeight,N.bindTexture(N.TEXTURE_2D,this.id),N.texImage2D(N.TEXTURE_2D,0,this.format,this.format,this.type,t)},Y.prototype.initFromBytes=function(t,e,r){this.width=t,this.height=e,this.format=N.RGBA,this.type=N.UNSIGNED_BYTE,N.bindTexture(N.TEXTURE_2D,this.id),N.texImage2D(N.TEXTURE_2D,0,N.RGBA,t,e,0,N.RGBA,this.type,new Uint8Array(r))},Y.prototype.destroy=function(){N.deleteTexture(this.id),this.id=null},Y.prototype.use=function(t){N.activeTexture(N.TEXTURE0+(t||0)),N.bindTexture(N.TEXTURE_2D,this.id)},Y.prototype.unuse=function(t){N.activeTexture(N.TEXTURE0+(t||0)),N.bindTexture(N.TEXTURE_2D,null)},Y.prototype.ensureFormat=function(t,e,r,o){var i;1==arguments.length&&(t=(i=arguments[0]).width,e=i.height,r=i.format,o=i.type),t==this.width&&e==this.height&&r==this.format&&o==this.type||(this.width=t,this.height=e,this.format=r,this.type=o,N.bindTexture(N.TEXTURE_2D,this.id),N.texImage2D(N.TEXTURE_2D,0,this.format,t,e,0,this.format,this.type,null))},Y.prototype.drawTo=function(t){if(N.framebuffer=N.framebuffer||N.createFramebuffer(),N.bindFramebuffer(N.FRAMEBUFFER,N.framebuffer),N.framebufferTexture2D(N.FRAMEBUFFER,N.COLOR_ATTACHMENT0,N.TEXTURE_2D,this.id,0),N.checkFramebufferStatus(N.FRAMEBUFFER)!==N.FRAMEBUFFER_COMPLETE)throw Error("incomplete framebuffer");N.viewport(0,0,this.width,this.height),t(),N.bindFramebuffer(N.FRAMEBUFFER,null)},W=null,Y.prototype.fillUsingCanvas=function(t){return t(V(this)),this.format=N.RGBA,this.type=N.UNSIGNED_BYTE,N.bindTexture(N.TEXTURE_2D,this.id),N.texImage2D(N.TEXTURE_2D,0,N.RGBA,N.RGBA,N.UNSIGNED_BYTE,W),this},Y.prototype.toImage=function(t){this.use(),j.getDefaultShader().drawRect();var e=4*this.width*this.height,r=new Uint8Array(e),o=V(this),i=o.createImageData(this.width,this.height);N.readPixels(0,0,this.width,this.height,N.RGBA,N.UNSIGNED_BYTE,r);for(var a=0;a>1;this.xa[o]>t?r=o:e=o}o=this.xa[r]-this.xa[e];var i=(this.xa[r]-t)/o;return t=(t-this.xa[e])/o,i*this.ya[e]+t*this.ya[r]+((i*i*i-i)*this.y2[e]+(t*t*t-t)*this.y2[r])*o*o/6},$.prototype.destroy=function(){N.deleteProgram(this.program),this.program=null},$.prototype.uniforms=function(t){for(var e in N.useProgram(this.program),t)if(t.hasOwnProperty(e)){var r=N.getUniformLocation(this.program,e);if(null!==r){var o=t[e];if("[object Array]"==Object.prototype.toString.call(o))switch(o.length){case 1:N.uniform1fv(r,new Float32Array(o));break;case 2:N.uniform2fv(r,new Float32Array(o));break;case 3:N.uniform3fv(r,new Float32Array(o));break;case 4:N.uniform4fv(r,new Float32Array(o));break;case 9:N.uniformMatrix3fv(r,!1,new Float32Array(o));break;case 16:N.uniformMatrix4fv(r,!1,new Float32Array(o));break;default:throw"dont't know how to load uniform \""+e+'" of length '+o.length}else{if("[object Number]"!=Object.prototype.toString.call(o))throw'attempted to set uniform "'+e+'" to invalid value '+(o||"undefined").toString();N.uniform1f(r,o)}}}return this},$.prototype.textures=function(t){for(var e in N.useProgram(this.program),t)t.hasOwnProperty(e)&&N.uniform1i(N.getUniformLocation(this.program,e),t[e]);return this},$.prototype.drawRect=function(t,e,r,o){var i=N.getParameter(N.VIEWPORT);e=void 0!==e?(e-i[1])/i[3]:0,t=void 0!==t?(t-i[0])/i[2]:0,r=void 0!==r?(r-i[0])/i[2]:1,o=void 0!==o?(o-i[1])/i[3]:1,null==N.vertexBuffer&&(N.vertexBuffer=N.createBuffer()),N.bindBuffer(N.ARRAY_BUFFER,N.vertexBuffer),N.bufferData(N.ARRAY_BUFFER,new Float32Array([t,e,t,o,r,e,r,o]),N.STATIC_DRAW),null==N.texCoordBuffer&&(N.texCoordBuffer=N.createBuffer(),N.bindBuffer(N.ARRAY_BUFFER,N.texCoordBuffer),N.bufferData(N.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,1]),N.STATIC_DRAW)),null==this.vertexAttribute&&(this.vertexAttribute=N.getAttribLocation(this.program,"vertex"),N.enableVertexAttribArray(this.vertexAttribute)),null==this.texCoordAttribute&&(this.texCoordAttribute=N.getAttribLocation(this.program,"_texCoord"),N.enableVertexAttribArray(this.texCoordAttribute)),N.useProgram(this.program),N.bindBuffer(N.ARRAY_BUFFER,N.vertexBuffer),N.vertexAttribPointer(this.vertexAttribute,2,N.FLOAT,!1,0,0),N.bindBuffer(N.ARRAY_BUFFER,N.texCoordBuffer),N.vertexAttribPointer(this.texCoordAttribute,2,N.FLOAT,!1,0,0),N.drawArrays(N.TRIANGLE_STRIP,0,4)},$.getDefaultShader=function(){return N.defaultShader=N.defaultShader||new $,N.defaultShader};var j=$,q="float random(vec3 scale,float seed){return fract(sin(dot(gl_FragCoord.xyz+seed,scale))*43758.5453+seed);}";function J(t,e){if(t=N.createShader(t),N.shaderSource(t,e),N.compileShader(t),N.getShaderParameter(t,N.COMPILE_STATUS))return t;throw"compile error: "+N.getShaderInfoLog(t)}function $(t,e){if(this.texCoordAttribute=this.vertexAttribute=null,this.program=N.createProgram(),e="precision highp float;"+(e=e||"uniform sampler2D texture;varying vec2 texCoord;void main(){gl_FragColor=texture2D(texture,texCoord);}"),N.attachShader(this.program,J(N.VERTEX_SHADER,t=t||"attribute vec2 vertex;attribute vec2 _texCoord;varying vec2 texCoord;void main(){texCoord=_texCoord;gl_Position=vec4(vertex*2.0-1.0,0.0,1.0);}")),N.attachShader(this.program,J(N.FRAGMENT_SHADER,e)),N.linkProgram(this.program),!N.getProgramParameter(this.program,N.LINK_STATUS))throw"link error: "+N.getProgramInfoLog(this.program)}return O}();"object"==typeof module?module.exports=fx:window.fx=fx,function(){function t(e){return e instanceof t?e:this instanceof t?void(this.EXIFwrapped=e):new t(e)}var e=("undefined"!=typeof exports?(exports="undefined"!=typeof module&&module.exports?module.exports=t:exports).EXIF=t:this.EXIF=t,t.Tags={36864:"ExifVersion",40960:"FlashpixVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",37121:"ComponentsConfiguration",37122:"CompressedBitsPerPixel",37500:"MakerNote",37510:"UserComment",40964:"RelatedSoundFile",36867:"DateTimeOriginal",36868:"DateTimeDigitized",37520:"SubsecTime",37521:"SubsecTimeOriginal",37522:"SubsecTimeDigitized",33434:"ExposureTime",33437:"FNumber",34850:"ExposureProgram",34852:"SpectralSensitivity",34855:"ISOSpeedRatings",34856:"OECF",37377:"ShutterSpeedValue",37378:"ApertureValue",37379:"BrightnessValue",37380:"ExposureBias",37381:"MaxApertureValue",37382:"SubjectDistance",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37396:"SubjectArea",37386:"FocalLength",41483:"FlashEnergy",41484:"SpatialFrequencyResponse",41486:"FocalPlaneXResolution",41487:"FocalPlaneYResolution",41488:"FocalPlaneResolutionUnit",41492:"SubjectLocation",41493:"ExposureIndex",41495:"SensingMethod",41728:"FileSource",41729:"SceneType",41730:"CFAPattern",41985:"CustomRendered",41986:"ExposureMode",41987:"WhiteBalance",41988:"DigitalZoomRation",41989:"FocalLengthIn35mmFilm",41990:"SceneCaptureType",41991:"GainControl",41992:"Contrast",41993:"Saturation",41994:"Sharpness",41995:"DeviceSettingDescription",41996:"SubjectDistanceRange",40965:"InteroperabilityIFDPointer",42016:"ImageUniqueID"}),r=t.TiffTags={256:"ImageWidth",257:"ImageHeight",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer",40965:"InteroperabilityIFDPointer",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",274:"Orientation",277:"SamplesPerPixel",284:"PlanarConfiguration",530:"YCbCrSubSampling",531:"YCbCrPositioning",282:"XResolution",283:"YResolution",296:"ResolutionUnit",273:"StripOffsets",278:"RowsPerStrip",279:"StripByteCounts",513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength",301:"TransferFunction",318:"WhitePoint",319:"PrimaryChromaticities",529:"YCbCrCoefficients",532:"ReferenceBlackWhite",306:"DateTime",270:"ImageDescription",271:"Make",272:"Model",305:"Software",315:"Artist",33432:"Copyright"},o=t.GPSTags={0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude",5:"GPSAltitudeRef",6:"GPSAltitude",7:"GPSTimeStamp",8:"GPSSatellites",9:"GPSStatus",10:"GPSMeasureMode",11:"GPSDOP",12:"GPSSpeedRef",13:"GPSSpeed",14:"GPSTrackRef",15:"GPSTrack",16:"GPSImgDirectionRef",17:"GPSImgDirection",18:"GPSMapDatum",19:"GPSDestLatitudeRef",20:"GPSDestLatitude",21:"GPSDestLongitudeRef",22:"GPSDestLongitude",23:"GPSDestBearingRef",24:"GPSDestBearing",25:"GPSDestDistanceRef",26:"GPSDestDistance",27:"GPSProcessingMethod",28:"GPSAreaInformation",29:"GPSDateStamp",30:"GPSDifferential"},i=t.IFD1Tags={256:"ImageWidth",257:"ImageHeight",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",273:"StripOffsets",274:"Orientation",277:"SamplesPerPixel",278:"RowsPerStrip",279:"StripByteCounts",282:"XResolution",283:"YResolution",284:"PlanarConfiguration",296:"ResolutionUnit",513:"JpegIFOffset",514:"JpegIFByteCount",529:"YCbCrCoefficients",530:"YCbCrSubSampling",531:"YCbCrPositioning",532:"ReferenceBlackWhite"},a=t.StringValues={ExposureProgram:{0:"Not defined",1:"Manual",2:"Normal program",3:"Aperture priority",4:"Shutter priority",5:"Creative program",6:"Action program",7:"Portrait mode",8:"Landscape mode"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{0:"Unknown",1:"Daylight",2:"Fluorescent",3:"Tungsten (incandescent light)",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 - 5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},SensingMethod:{1:"Not defined",2:"One-chip color area sensor",3:"Two-chip color area sensor",4:"Three-chip color area sensor",5:"Color sequential area sensor",7:"Trilinear sensor",8:"Color sequential linear sensor"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},SceneType:{1:"Directly photographed"},CustomRendered:{0:"Normal process",1:"Custom process"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},GainControl:{0:"None",1:"Low gain up",2:"High gain up",3:"Low gain down",4:"High gain down"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},SubjectDistanceRange:{0:"Unknown",1:"Macro",2:"Close view",3:"Distant view"},FileSource:{3:"DSC"},Components:{0:"",1:"Y",2:"Cb",3:"Cr",4:"R",5:"G",6:"B"}};function l(t){return t.exifdata}function s(t){var n=new DataView(t);if(255!=n.getUint8(0)||216!=n.getUint8(1))return!1;for(var l=2,s=t.byteLength;lt.byteLength)return{};var a=u(t,e,e+r,i,o);if(a.Compression)switch(a.Compression){case 6:var n,l;a.JpegIFOffset&&a.JpegIFByteCount&&(n=e+a.JpegIFOffset,l=a.JpegIFByteCount,a.blob=new Blob([new Uint8Array(t.buffer,n,l)],{type:"image/jpeg"}));break;case 1:console.log("Thumbnail image format is TIFF, which is not implemented.");break;default:console.log("Unknown thumbnail image format '%s'",a.Compression)}else 2==a.PhotometricInterpretation&&console.log("Thumbnail image format is RGB, which is not implemented.");return a}(p,x,v,c),f}l+=2+n.getUint16(l+2)}}var c={120:"caption",110:"credit",25:"keywords",55:"dateCreated",80:"byline",85:"bylineTitle",122:"captionWriter",105:"headline",116:"copyright",15:"category"};function u(t,e,r,o,i){for(var a,n=t.getUint16(r,!i),l={},s=0;s")+8,o=(r=r.substring(r.indexOf("=10.0.0" + }, + "peerDependencies": { + "leaflet": "1.x" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", + "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.9", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.9", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", + "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.9", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz", + "integrity": "sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz", + "integrity": "sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-member-expression-to-functions": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", + "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz", + "integrity": "sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-wrap-function": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", + "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz", + "integrity": "sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", + "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz", + "integrity": "sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", + "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", + "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz", + "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz", + "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz", + "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", + "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz", + "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz", + "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.9.tgz", + "integrity": "sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.6", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.6", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.9", + "babel-plugin-polyfill-corejs2": "^0.3.1", + "babel-plugin-polyfill-corejs3": "^0.5.2", + "babel-plugin-polyfill-regenerator": "^0.3.1", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", + "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz", + "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.9", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.9", + "@babel/types": "^7.18.9", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", + "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", + "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz", + "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, + "node_modules/@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", + "dev": true + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.2.tgz", + "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "13.11.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.1.tgz", + "integrity": "sha512-eWQGP3qtxwL8FGneRrC5DwrJLGN4/dH1clNTuLfN81HCrxVtxRjygDTUoZJ5ASlDEeo0ppYFQjQIlXhtXpOn6g==", + "dev": true + }, + "node_modules/@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", + "dev": true + }, + "node_modules/babel-loader": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/babel-loader/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", + "dev": true, + "dependencies": { + "continuable-cache": "^0.3.1", + "error": "^7.0.0", + "raw-body": "~1.1.0", + "safe-json-parse": "~1.0.1" + } + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/body-parser/node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bonjour-service": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.12.tgz", + "integrity": "sha512-pMmguXYCu63Ug37DluMKEHdxc+aaIf/ay4YbF8Gxtba+9d3u+rmEWy61VK3Z3hp8Rskok3BunHYnG0dUHAsblw==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.4" + } + }, + "node_modules/bonjour-service/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", + "escalade": "^3.1.1", + "node-releases": "^2.0.3", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", + "dev": true + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001346", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001346.tgz", + "integrity": "sha512-q6ibZUO2t88QCIPayP/euuDREq+aMAxFE5S70PkrLh0iTDj/zEhgvJRKC2+CvXY6EWc6oQwUR48lL5vCW6jiXQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/chokidar/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", + "dev": true, + "dependencies": { + "del": "^4.1.1" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": ">=4.0.0 <6.0.0" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "node_modules/cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/cloneable-readable/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/cloneable-readable/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/color-string": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "dev": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colornames": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", + "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=", + "dev": true + }, + "node_modules/colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "dev": true, + "dependencies": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.22.8", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.8.tgz", + "integrity": "sha512-pQnwg4xtuvc2Bs/5zYQPaEYYSuTxsF7LBWF0SvnVhthZo/Qe+rJpcEekrdNK5DWwDJ0gv0oI9NNX5Mppdy0ctg==", + "dev": true, + "dependencies": { + "browserslist": "^4.20.3", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "node_modules/css-select/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/css-selector-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", + "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==", + "dev": true + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", + "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cssmin": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/cssmin/-/cssmin-0.4.3.tgz", + "integrity": "sha1-yRlAd+Dr2s1pHV9ZAVudgZ840BU=", + "dev": true, + "bin": { + "cssmin": "bin/cssmin" + } + }, + "node_modules/csso": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "dev": true, + "dependencies": { + "css-tree": "1.0.0-alpha.39" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", + "dev": true + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/date-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", + "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-for-each": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/deep-for-each/-/deep-for-each-3.0.0.tgz", + "integrity": "sha512-pPN+0f8jlnNP+z90qqOdxGghJU5XM6oBDhvAR+qdQzjCg5pk/7VPPvKK1GqoXEFkHza6ZS+Otzzvmr0g3VUaKw==", + "dev": true, + "dependencies": { + "lodash.isplainobject": "^4.0.6" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/default-gateway/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-gateway/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "node_modules/diagnostics": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", + "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", + "dev": true, + "dependencies": { + "colorspace": "1.1.x", + "enabled": "1.0.x", + "kuler": "1.0.x" + } + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.3.1.tgz", + "integrity": "sha512-spBwIj0TK0Ey3666GwIdWVfUpLyubpU53BTCu8iPn4r4oXd9O14Hjg3EHw3ts2oed77/SeckunUYCyRlSngqHw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "dev": true + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.144", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.144.tgz", + "integrity": "sha512-R3RV3rU1xWwFJlSClVWDvARaOk6VUO/FubHLodIASDB3Mc2dzuWvNdfOgH9bwHUTqT79u92qw60NWfwUdzAqdg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "dev": true, + "dependencies": { + "env-variable": "0.0.x" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", + "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "dev": true, + "dependencies": { + "@socket.io/base64-arraybuffer": "~1.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "node_modules/env-variable": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", + "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==", + "dev": true + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/error": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", + "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", + "dev": true, + "dependencies": { + "string-template": "~0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "node_modules/es6-promisify": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", + "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz", + "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.1", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-google": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", + "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/eslint/node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "node_modules/eslint/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/glob-parent/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", + "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/exif-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/exif-js/-/exif-js-2.3.0.tgz", + "integrity": "sha1-nRCBm/Vx+HOBPnZAJBJVq5zhqBQ=" + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "node_modules/express/node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/express/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/fast-glob/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/fast-glob/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==", + "dev": true + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "dependencies": { + "glob": "~5.0.0" + }, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/findup-sync/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat-cache/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/flat-cache/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "dependencies": { + "globule": "^1.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getobject": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", + "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glfx": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/glfx/-/glfx-0.0.4.tgz", + "integrity": "sha1-G3dtx0jAgZlGJLCvO1Y4QD3nj00=" + }, + "node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globby/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globby/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globule": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz", + "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==", + "dev": true, + "dependencies": { + "glob": "~7.1.1", + "lodash": "~4.17.12", + "minimatch": "~3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/globule/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/grunt": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", + "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", + "dev": true, + "dependencies": { + "dateformat": "~3.0.3", + "eventemitter2": "~0.4.13", + "exit": "~0.1.2", + "findup-sync": "~0.3.0", + "glob": "~7.1.6", + "grunt-cli": "~1.4.3", + "grunt-known-options": "~2.0.0", + "grunt-legacy-log": "~3.0.0", + "grunt-legacy-util": "~2.0.1", + "iconv-lite": "~0.4.13", + "js-yaml": "~3.14.0", + "minimatch": "~3.0.4", + "mkdirp": "~1.0.4", + "nopt": "~3.0.6", + "rimraf": "~3.0.2" + }, + "bin": { + "grunt": "bin/grunt" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-cli": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", + "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", + "dev": true, + "dependencies": { + "grunt-known-options": "~2.0.0", + "interpret": "~1.1.0", + "liftup": "~3.0.1", + "nopt": "~4.0.1", + "v8flags": "~3.2.0" + }, + "bin": { + "grunt": "bin/grunt" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt-cli/node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/grunt-contrib-concat": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-2.1.0.tgz", + "integrity": "sha512-Vnl95JIOxfhEN7bnYIlCgQz41kkbi7tsZ/9a4usZmxNxi1S2YAIOy8ysFmO8u4MN26Apal1O106BwARdaNxXQw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "source-map": "^0.5.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "grunt": ">=1.4.1" + } + }, + "node_modules/grunt-contrib-concat/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/grunt-contrib-concat/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/grunt-contrib-concat/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/grunt-contrib-concat/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/grunt-contrib-concat/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-contrib-concat/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-contrib-watch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", + "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==", + "dev": true, + "dependencies": { + "async": "^2.6.0", + "gaze": "^1.1.0", + "lodash": "^4.17.10", + "tiny-lr": "^1.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-watch/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/grunt-karma": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/grunt-karma/-/grunt-karma-4.0.2.tgz", + "integrity": "sha512-4+iBBkXZjHHMDAG5kpHCdDUqlSEBJ6sqouLMRf0p+QB8wGMs300DtaCQphHqd7pM3gpXoGVT3yRRsT7KOZpJMA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.10" + }, + "peerDependencies": { + "grunt": ">=0.4.x", + "karma": "^4.0.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/grunt-known-options": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", + "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-legacy-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", + "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", + "dev": true, + "dependencies": { + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~2.1.0", + "hooker": "~0.2.3", + "lodash": "~4.17.19" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/grunt-legacy-log-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", + "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", + "dev": true, + "dependencies": { + "chalk": "~4.1.0", + "lodash": "~4.17.19" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/grunt-legacy-log-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-legacy-util": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", + "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", + "dev": true, + "dependencies": { + "async": "~3.2.0", + "exit": "~0.1.2", + "getobject": "~1.0.0", + "hooker": "~0.2.3", + "lodash": "~4.17.21", + "underscore.string": "~3.3.5", + "which": "~2.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt-svg-sprite": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/grunt-svg-sprite/-/grunt-svg-sprite-1.5.0.tgz", + "integrity": "sha512-E7q84qIYLygO/CRlqH2t5EdsaLdblqNs2JSpY+d1XEyNIlOU0tsUuG/cro36Nd3IGSnouzIJAS4yurpPUHUrRA==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "prettysize": "^1.1.0", + "svg-sprite": "^1.5.0" + }, + "engines": { + "node": ">= 6.4" + }, + "peerDependencies": { + "grunt": ">=1.0.1" + } + }, + "node_modules/grunt-svgmin": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/grunt-svgmin/-/grunt-svgmin-6.0.1.tgz", + "integrity": "sha512-NmVF57+Un8oiq8ZVJQJEkomEeGMcq2Sd6OX/0k2tpUc5Y/+kXwgg6CDW9RA0Yr9jXOcfFE46CNKg0hBxp2SFiQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "log-symbols": "^2.2.0", + "pretty-bytes": "^5.1.0", + "svgo": "^1.2.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "grunt": ">=1" + } + }, + "node_modules/grunt-webpack": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/grunt-webpack/-/grunt-webpack-5.0.0.tgz", + "integrity": "sha512-C7emzVIGJhZ5V5ZYjylr9sDD9PE9Dh/55NaSzP2P2dhif+m/1gHbjDZQ7PDzguyuzwBz4Qc8voQHR06FSp4CKg==", + "dev": true, + "dependencies": { + "deep-for-each": "^3.0.0", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/grunt/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/grunt/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/grunt/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gruntify-eslint": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gruntify-eslint/-/gruntify-eslint-5.0.0.tgz", + "integrity": "sha512-pa2sXHK9+U4dCGdGSIMkpJARNwRStdLBsddNxmSHSSWROUdhWMrXvFWm6pj48zJhyV3Qy068VIuF1seYIvc0cw==", + "dev": true, + "dependencies": { + "eslint": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "grunt": ">=0.4.5" + } + }, + "node_modules/gruntify-eslint/node_modules/acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/gruntify-eslint/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/gruntify-eslint/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/gruntify-eslint/node_modules/eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^6.14.0 || ^8.10.0 || >=9.10.0" + } + }, + "node_modules/gruntify-eslint/node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/gruntify-eslint/node_modules/eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/gruntify-eslint/node_modules/eslint/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gruntify-eslint/node_modules/eslint/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/gruntify-eslint/node_modules/espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "dependencies": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/gruntify-eslint/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/gruntify-eslint/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/gruntify-eslint/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/gruntify-eslint/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/gruntify-eslint/node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true, + "engines": { + "node": ">=6.5.0" + } + }, + "node_modules/gruntify-eslint/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gruntify-eslint/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gruntify-eslint/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gruntify-eslint/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gruntify-eslint/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/gruntify-eslint/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hasha": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", + "dev": true, + "dependencies": { + "is-stream": "^1.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http-proxy-middleware/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/http-proxy-middleware/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/husky": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "node_modules/invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", + "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true + }, + "node_modules/karma": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.0.tgz", + "integrity": "sha512-s8m7z0IF5g/bS5ONT7wsOavhW4i4aFkzD4u4wgzAQWT4HGUeWI3i21cK2Yz6jndMAeHETp5XuNsRoyGJZXVd4w==", + "dev": true, + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-babel-preprocessor": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/karma-babel-preprocessor/-/karma-babel-preprocessor-8.0.2.tgz", + "integrity": "sha512-6ZUnHwaK2EyhgxbgeSJW6n6WZUYSEdekHIV/qDUnPgMkVzQBHEvd07d2mTL5AQjV8uTUgH6XslhaPrp+fHWH2A==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "@babel/core": "7" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", + "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", + "dev": true, + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-chrome-launcher/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", + "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-mocha": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz", + "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.3" + } + }, + "node_modules/karma-mocha-reporter": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz", + "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=", + "dev": true, + "dependencies": { + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "strip-ansi": "^4.0.0" + }, + "peerDependencies": { + "karma": ">=0.13" + } + }, + "node_modules/karma-mocha-reporter/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/karma-mocha-reporter/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/karma-sinon": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz", + "integrity": "sha1-TjRD8oMP3s/2JNN0cWPxIX2qKpo=", + "dev": true, + "engines": { + "node": ">= 0.10.0" + }, + "peerDependencies": { + "karma": ">=0.10", + "sinon": "*" + } + }, + "node_modules/karma/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/karma/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/karma/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/karma/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/karma/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/karma/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/karma/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/karma/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/karma/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/karma/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/kew": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/kuler": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", + "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", + "dev": true, + "dependencies": { + "colornames": "^1.1.1" + } + }, + "node_modules/lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "dependencies": { + "invert-kv": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/leaflet": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.8.0.tgz", + "integrity": "sha512-gwhMjFCQiYs3x/Sf+d49f10ERXaEFCPr+nVTryhAW8DWbMGqJqt9G4XuIaHmFW08zYvhgdzqXGr8AlW8v8dQkA==" + }, + "node_modules/leaflet-google-places-autocomplete": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/leaflet-google-places-autocomplete/-/leaflet-google-places-autocomplete-0.0.9.tgz", + "integrity": "sha512-NHefPZn53GQIjuAZmwEN/KTy8TobEu8kRU/WlYR58j5WrQU3vZ4w2OKVUCFzKU5jlWxeZP/SQTFhmXf2vkHIeQ==" + }, + "node_modules/leaflet-toolbar": { + "version": "0.4.0-alpha.2", + "resolved": "https://registry.npmjs.org/leaflet-toolbar/-/leaflet-toolbar-0.4.0-alpha.2.tgz", + "integrity": "sha512-g1KeU3DYGUOwXTS0vKIgJ8KgY0h/2B0qENNQUSYMFtSY2yzwaHWMbDyhDbk+aO8LgJ1iOX4fUt2bh1sYZbpmmQ==", + "peerDependencies": { + "leaflet": "*" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/liftup": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", + "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", + "dev": true, + "dependencies": { + "extend": "^3.0.2", + "findup-sync": "^4.0.0", + "fined": "^1.2.0", + "flagged-respawn": "^1.0.1", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.1", + "rechoir": "^0.7.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/liftup/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/liftup/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/liftup/node_modules/findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/liftup/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/liftup/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/liftup/node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/liftup/node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/liftup/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/livereload-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", + "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash._arraymap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arraymap/-/lodash._arraymap-3.0.0.tgz", + "integrity": "sha1-Go/Q9MDfS2HeoHbXF83Jfwo8PmY=", + "dev": true + }, + "node_modules/lodash._basecallback": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/lodash._basecallback/-/lodash._basecallback-3.3.1.tgz", + "integrity": "sha1-t7K7Q9whYEJKIczybFfkQ3cqjic=", + "dev": true, + "dependencies": { + "lodash._baseisequal": "^3.0.0", + "lodash._bindcallback": "^3.0.0", + "lodash.isarray": "^3.0.0", + "lodash.pairs": "^3.0.0" + } + }, + "node_modules/lodash._baseeach": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash._baseeach/-/lodash._baseeach-3.0.4.tgz", + "integrity": "sha1-z4cGVyyhROjZ11InyZDamC+TKvM=", + "dev": true, + "dependencies": { + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash._baseget": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/lodash._baseget/-/lodash._baseget-3.7.2.tgz", + "integrity": "sha1-G2rh1frPPCVTI1ChPBGXy4u2dPQ=", + "dev": true + }, + "node_modules/lodash._baseisequal": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz", + "integrity": "sha1-2AJfdjOdKTQnZ9zIh85cuVpbUfE=", + "dev": true, + "dependencies": { + "lodash.isarray": "^3.0.0", + "lodash.istypedarray": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "node_modules/lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "node_modules/lodash._topath": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/lodash._topath/-/lodash._topath-3.8.1.tgz", + "integrity": "sha1-PsXiYGAU9MuX91X+aRTt2L/ADqw=", + "dev": true, + "dependencies": { + "lodash.isarray": "^3.0.0" + } + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "node_modules/lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.istypedarray": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz", + "integrity": "sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I=", + "dev": true + }, + "node_modules/lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "dependencies": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "node_modules/lodash.map": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-3.1.4.tgz", + "integrity": "sha1-tIOs0beGxce0ksSV97UmYim8AMI=", + "dev": true, + "dependencies": { + "lodash._arraymap": "^3.0.0", + "lodash._basecallback": "^3.0.0", + "lodash._baseeach": "^3.0.0", + "lodash.isarray": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.pairs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.pairs/-/lodash.pairs-3.0.1.tgz", + "integrity": "sha1-u+CNV4bu6qCaFckevw3LfSvjJqk=", + "dev": true, + "dependencies": { + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash.pluck": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.pluck/-/lodash.pluck-3.1.2.tgz", + "integrity": "sha1-s0fwN0wBafDusE1nLYnOyGMsIjE=", + "dev": true, + "dependencies": { + "lodash._baseget": "^3.0.0", + "lodash._topath": "^3.0.0", + "lodash.isarray": "^3.0.0", + "lodash.map": "^3.0.0" + } + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log4js": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", + "dev": true, + "dependencies": { + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/log4js/node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "node_modules/logform": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", + "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", + "dev": true, + "dependencies": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + } + }, + "node_modules/logform/node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "dev": true, + "dependencies": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/matchdep/node_modules/findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/matchdep/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "dependencies": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/memfs": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.4.tgz", + "integrity": "sha512-W4gHNUE++1oSJVn8Y68jPXi+mkx3fXR5ITE/Ubz6EQ3xRpCN5k2CQ4AUR8094Z7211F876TyoBACGsIveqgiGA==", + "dev": true, + "dependencies": { + "fs-monkey": "1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mocha/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/mocha/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/mocha/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/mocha/node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/mocha/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mustache": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-3.2.1.tgz", + "integrity": "sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA==", + "dev": true, + "bin": { + "mustache": "bin/mustache" + }, + "engines": { + "npm": ">=1.4.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/nise": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz", + "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": ">=5", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "dev": true + }, + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", + "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=", + "dev": true + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/onetime/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "dependencies": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-to-regexp/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/phantomjs-prebuilt": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", + "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", + "deprecated": "this package is now deprecated", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-promise": "^4.0.3", + "extract-zip": "^1.6.5", + "fs-extra": "^1.0.0", + "hasha": "^2.2.0", + "kew": "^0.7.0", + "progress": "^1.1.8", + "request": "^2.81.0", + "request-progress": "^2.0.1", + "which": "^1.2.10" + }, + "bin": { + "phantomjs": "bin/phantomjs" + } + }, + "node_modules/phantomjs-prebuilt/node_modules/progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/phantomjs-prebuilt/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettysize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/prettysize/-/prettysize-1.1.0.tgz", + "integrity": "sha512-U5Noa+FYV1dGkICyLJz8IWlDUehPF4Bk9tZRO8YqPhLA9EoiHuFqtnpWY2mvMjHh5eOLo82HipeLn4RIiSsGqQ==", + "dev": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", + "dev": true, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", + "dev": true, + "dependencies": { + "bytes": "1", + "string_decoder": "0.10" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", + "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", + "dev": true, + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rev-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rev-hash/-/rev-hash-3.0.0.tgz", + "integrity": "sha512-s+87HfEKAu95TaTxnbCobn0/BkbzR23LHSwVdYvr8mn5+PPjzy+hTWyh92b5oaLgig9TKPe5d6ZcubsVBtUrZg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", + "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "dev": true, + "dependencies": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "node_modules/should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dev": true, + "dependencies": { + "should-type": "^1.4.0" + } + }, + "node_modules/should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", + "dev": true, + "dependencies": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "node_modules/should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", + "dev": true + }, + "node_modules/should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "dependencies": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "node_modules/should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel/node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, + "node_modules/sinon": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.0.tgz", + "integrity": "sha512-ugA6BFmE+WrJdh0owRZHToLd32Uw3Lxq6E6LtNRU+xTVBefx632h03Q7apXWRsRdZAJ41LB8aUfn2+O4jsDNMw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": "^9.1.2", + "@sinonjs/samsam": "^6.1.1", + "diff": "^5.0.0", + "nise": "^5.1.1", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/sinon/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/sinon/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/socket.io": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", + "dev": true + }, + "node_modules/socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "dev": true, + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs/node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/sockjs/node_modules/http-parser-js": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", + "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", + "dev": true + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/sockjs/node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/spdy-transport/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/spdy-transport/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", + "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", + "dev": true, + "dependencies": { + "date-format": "^4.0.3", + "debug": "^4.1.1", + "fs-extra": "^10.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/node_modules/fs-extra": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/streamroller/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimleft": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimright": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-sprite": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/svg-sprite/-/svg-sprite-1.5.0.tgz", + "integrity": "sha512-0mE5BLY3K8wg3+HrYfzpiKbIM44IGcg8uINED8ri22EdQbLvGecOHjRtkrNAlphbiU5kyGyqoBlIaukL45fs2Q==", + "dev": true, + "dependencies": { + "async": "^2.6.1", + "css-selector-parser": "^1.3.0", + "cssmin": "^0.4.3", + "cssom": "^0.3.4", + "dateformat": "^3.0.3", + "glob": "^7.1.3", + "js-yaml": "^3.12.0", + "lodash": "^4.17.11", + "lodash.pluck": "^3.1.2", + "mkdirp": "^0.5.1", + "mocha": "^5.2.0", + "mustache": "^3.0.0", + "phantomjs-prebuilt": "^2.1.16", + "prettysize": "^1.1.0", + "should": "^13.2.3", + "svgo": "^1.1.1", + "vinyl": "^2.2.0", + "winston": "^3.1.0", + "xmldom": "0.1.27", + "xpath": "^0.0.27", + "yargs": "^12.0.2" + }, + "bin": { + "svg-sprite": "bin/svg-sprite.js" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/svg-sprite/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/svg-sprite/node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/svg-sprite/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/svg-sprite/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/svg-sprite/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/svg-sprite/node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "node_modules/svg-sprite/node_modules/mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "dependencies": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/svg-sprite/node_modules/mocha/node_modules/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/svg-sprite/node_modules/mocha/node_modules/mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/svg-sprite/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/svg-sprite/node_modules/supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.0.tgz", + "integrity": "sha512-JC6qfIEkPBd9j1SMO3Pfn+A6w2kQV54tv+ABQLgZr7dA3k/DL/OBoYSWxzVpZev3J+bUHXfr55L8Mox7AaNo6g==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", + "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.7", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tiny-lr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", + "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", + "dev": true, + "dependencies": { + "body": "^5.1.0", + "debug": "^3.1.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.3.0", + "object-assign": "^4.1.0", + "qs": "^6.4.0" + } + }, + "node_modules/tiny-lr/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/tmp/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tmp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tmp/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", + "dev": true + }, + "node_modules/tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/ua-parser-js": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/uglify-js": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.0.tgz", + "integrity": "sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==", + "dev": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/underscore.string": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", + "dev": true, + "dependencies": { + "sprintf-js": "^1.1.1", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/underscore.string/node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", + "dev": true, + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webgl-distort": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/webgl-distort/-/webgl-distort-0.0.2.tgz", + "integrity": "sha1-gNL2HvxK7OKOeh/xN14UqsbQbzY=" + }, + "node_modules/webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-cli/node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/webpack-cli/node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/webpack-dev-middleware/node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz", + "integrity": "sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", + "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-merge-and-include-globally": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/webpack-merge-and-include-globally/-/webpack-merge-and-include-globally-2.3.4.tgz", + "integrity": "sha512-s5dd7m3ycVBlC7C6GAx91JQzbjhxC/NJRuT2sCkg8WCcF8CE1x/7xwVXqgmt0Fr/H/0sX5C5HE2RdU6+vCY5yg==", + "dev": true, + "dependencies": { + "es6-promisify": "^6.1.1", + "glob": "^7.1.6", + "rev-hash": "^3.0.0" + }, + "peerDependencies": { + "webpack": ">=1.0.0" + } + }, + "node_modules/webpack-merge-and-include-globally/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-merge-and-include-globally/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/winston": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", + "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", + "dev": true, + "dependencies": { + "async": "^2.6.1", + "diagnostics": "^1.1.1", + "is-stream": "^1.1.0", + "logform": "^2.1.1", + "one-time": "0.0.4", + "readable-stream": "^3.1.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.3.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-transport": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", + "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", + "dev": true, + "dependencies": { + "readable-stream": "^2.3.6", + "triple-beam": "^1.2.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/winston-transport/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/winston/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/winston/node_modules/safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + }, + "node_modules/winston/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", + "deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0", + "dev": true, + "engines": { + "node": ">=0.1" + } + }, + "node_modules/xpath": { + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", + "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==", + "dev": true, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "dependencies": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "node_modules/yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, "dependencies": { "@ampproject/remapping": { "version": "2.2.0", @@ -1745,7 +16623,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true + "dev": true, + "requires": {} }, "@webpack-cli/info": { "version": "1.5.0", @@ -1760,7 +16639,8 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true + "dev": true, + "requires": {} }, "@xtuc/ieee754": { "version": "1.2.0", @@ -1800,13 +16680,15 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true + "dev": true, + "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "ajv": { "version": "6.12.6", @@ -1853,7 +16735,8 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "ansi-escapes": { "version": "3.2.0", @@ -3984,7 +18867,8 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", - "dev": true + "dev": true, + "requires": {} }, "eslint-scope": { "version": "7.1.1", @@ -6915,7 +21799,8 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/karma-babel-preprocessor/-/karma-babel-preprocessor-8.0.2.tgz", "integrity": "sha512-6ZUnHwaK2EyhgxbgeSJW6n6WZUYSEdekHIV/qDUnPgMkVzQBHEvd07d2mTL5AQjV8uTUgH6XslhaPrp+fHWH2A==", - "dev": true + "dev": true, + "requires": {} }, "karma-chrome-launcher": { "version": "3.1.1", @@ -6992,7 +21877,8 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz", "integrity": "sha1-TjRD8oMP3s/2JNN0cWPxIX2qKpo=", - "dev": true + "dev": true, + "requires": {} }, "kew": { "version": "0.7.0", @@ -7036,8 +21922,7 @@ "leaflet": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.8.0.tgz", - "integrity": "sha512-gwhMjFCQiYs3x/Sf+d49f10ERXaEFCPr+nVTryhAW8DWbMGqJqt9G4XuIaHmFW08zYvhgdzqXGr8AlW8v8dQkA==", - "dev": true + "integrity": "sha512-gwhMjFCQiYs3x/Sf+d49f10ERXaEFCPr+nVTryhAW8DWbMGqJqt9G4XuIaHmFW08zYvhgdzqXGr8AlW8v8dQkA==" }, "leaflet-google-places-autocomplete": { "version": "0.0.9", @@ -7047,7 +21932,8 @@ "leaflet-toolbar": { "version": "0.4.0-alpha.2", "resolved": "https://registry.npmjs.org/leaflet-toolbar/-/leaflet-toolbar-0.4.0-alpha.2.tgz", - "integrity": "sha512-g1KeU3DYGUOwXTS0vKIgJ8KgY0h/2B0qENNQUSYMFtSY2yzwaHWMbDyhDbk+aO8LgJ1iOX4fUt2bh1sYZbpmmQ==" + "integrity": "sha512-g1KeU3DYGUOwXTS0vKIgJ8KgY0h/2B0qENNQUSYMFtSY2yzwaHWMbDyhDbk+aO8LgJ1iOX4fUt2bh1sYZbpmmQ==", + "requires": {} }, "levn": { "version": "0.4.1", @@ -9895,6 +24781,12 @@ } } }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, "string-template": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", @@ -9971,12 +24863,6 @@ "es-abstract": "^1.17.5" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -11063,7 +25949,8 @@ "version": "8.7.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -11325,7 +26212,8 @@ "version": "8.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true + "dev": true, + "requires": {} }, "xmldom": { "version": "0.1.27", diff --git a/test/src/DistortableImageOverlaySpec.js b/test/src/DistortableImageOverlaySpec.js index 3818e3ae9..2710685b6 100644 --- a/test/src/DistortableImageOverlaySpec.js +++ b/test/src/DistortableImageOverlaySpec.js @@ -51,7 +51,7 @@ describe('L.DistortableImageOverlay', function() { const ov2 = L.distortableImageOverlay('/examples/example.jpg', {}).addTo(map); L.DomEvent.on(ov2.getElement(), 'load', function() { - expect(ov2.editing.editActions.length).to.eq(10); + expect(ov2.editing.editActions.length).to.eq(11); done(); }); }); From 645dc37fb5db31f483227c0591d1b9acffa3e333 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sat, 22 Oct 2022 03:24:59 +0200 Subject: [PATCH 04/73] afegir carpeta node_modules --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 60976d231..3b1e1266e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -node_modules +node_modules/* coverage todo.txt *.swp From 1d63e80f42390fa890c875e4622a0b9c8022942e Mon Sep 17 00:00:00 2001 From: themacboy Date: Sat, 22 Oct 2022 03:32:52 +0200 Subject: [PATCH 05/73] intentar carregar llibreries --- .gitignore | 5 ++--- dist/leaflet.distortableimage.js.map | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 dist/leaflet.distortableimage.js.map diff --git a/.gitignore b/.gitignore index 3b1e1266e..58c90df49 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -node_modules/* +node_modules coverage todo.txt *.swp @@ -10,5 +10,4 @@ dist/* !dist/leaflet.distortableimage.js !dist/vendor.js !dist/vendor.css -!node_modules/leaflet/dist/leaflet.css -!node_modules/leaflet/dist/leaflet.js +!dist/leaflet.distortableimage.js.map diff --git a/dist/leaflet.distortableimage.js.map b/dist/leaflet.distortableimage.js.map new file mode 100644 index 000000000..87efcbacc --- /dev/null +++ b/dist/leaflet.distortableimage.js.map @@ -0,0 +1 @@ +{"version":3,"file":"leaflet.distortableimage.js","mappings":"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","sources":["webpack://leaflet-distortableimage/./src/DistortableCollection.js","webpack://leaflet-distortableimage/./src/DistortableImageOverlay.js","webpack://leaflet-distortableimage/./src/components/DistortableImage.Keymapper.js","webpack://leaflet-distortableimage/./src/edit/DistortableCollection.Edit.js","webpack://leaflet-distortableimage/./src/edit/DistortableImage.Edit.js","webpack://leaflet-distortableimage/./src/edit/actions/BorderAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DeleteAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DistortAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DragAction.js","webpack://leaflet-distortableimage/./src/edit/actions/EditAction.js","webpack://leaflet-distortableimage/./src/edit/actions/ExportAction.js","webpack://leaflet-distortableimage/./src/edit/actions/FreeRotateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/GeolocateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/LockAction.js","webpack://leaflet-distortableimage/./src/edit/actions/OpacitiesAction.js","webpack://leaflet-distortableimage/./src/edit/actions/OpacityAction.js","webpack://leaflet-distortableimage/./src/edit/actions/RestoreAction.js","webpack://leaflet-distortableimage/./src/edit/actions/RotateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/ScaleAction.js","webpack://leaflet-distortableimage/./src/edit/actions/StackAction.js","webpack://leaflet-distortableimage/./src/edit/actions/UnlockAction.js","webpack://leaflet-distortableimage/./src/edit/getEXIFdata.js","webpack://leaflet-distortableimage/./src/edit/handles/DistortHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/DragHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/EditHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/FreeRotateHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/LockHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/RotateHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/ScaleHandle.js","webpack://leaflet-distortableimage/./src/edit/toolbars/DistortableImage.ControlBar.js","webpack://leaflet-distortableimage/./src/edit/toolbars/DistortableImage.PopupBar.js","webpack://leaflet-distortableimage/./src/iconsets/IconSet.js","webpack://leaflet-distortableimage/./src/iconsets/KeymapperIconSet.js","webpack://leaflet-distortableimage/./src/iconsets/ToolbarIconSet.js","webpack://leaflet-distortableimage/./src/mapmixins/BoxCollector.js","webpack://leaflet-distortableimage/./src/mapmixins/DoubleClickLabels.js","webpack://leaflet-distortableimage/./src/mapmixins/DoubleClickZoom.js","webpack://leaflet-distortableimage/./src/mapmixins/MapMixins.js","webpack://leaflet-distortableimage/./src/util/DomUtil.js","webpack://leaflet-distortableimage/./src/util/IconUtil.js","webpack://leaflet-distortableimage/./src/util/ImageUtil.js","webpack://leaflet-distortableimage/./src/util/MatrixUtil.js","webpack://leaflet-distortableimage/./src/util/TrigUtil.js","webpack://leaflet-distortableimage/./src/util/Utils.js","webpack://leaflet-distortableimage/webpack/startup"],"sourcesContent":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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.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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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: function(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: function(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove: function(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart: function() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd: function() {\n this._fireEdit();\n },\n\n _fireEdit: function() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners: function() {\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: function() {\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: function(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: function(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: function(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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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","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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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 From 1b6b690fccbca0e86807d406f273e9477cf16e96 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sat, 22 Oct 2022 03:33:18 +0200 Subject: [PATCH 06/73] carregar leaflet desde CDN --- examples/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/index.html b/examples/index.html index 86e592b46..3506a72b1 100644 --- a/examples/index.html +++ b/examples/index.html @@ -6,12 +6,12 @@ - + - + From c4fbb7cdee5074c8a8d8fb6dcf0e81352b62755d Mon Sep 17 00:00:00 2001 From: themacboy Date: Sat, 22 Oct 2022 04:05:42 +0200 Subject: [PATCH 07/73] afegir icona Opacities --- assets/icons/symbol/sprite.symbol.html | 12 ++++++++++++ assets/icons/symbol/sprite.symbol.svg | 2 +- src/edit/actions/OpacitiesAction.js | 4 ++-- src/iconsets/ToolbarIconSet.js | 1 + 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/assets/icons/symbol/sprite.symbol.html b/assets/icons/symbol/sprite.symbol.html index ea9b494b1..a3746ee41 100644 --- a/assets/icons/symbol/sprite.symbol.html +++ b/assets/icons/symbol/sprite.symbol.html @@ -34,6 +34,7 @@ .svg-lock-dims { width: 18px; height: 18px; } .svg-opacity-dims { width: 18px; height: 18px; } .svg-opacity_empty-dims { width: 14px; height: 18px; } + .svg-opacities-dims { width: 14px; height: 18px; } .svg-restore-dims { width: 18px; height: 18px; } .svg-rotate-dims { width: 18px; height: 18px; } .svg-scale-dims { width: 18px; height: 18px; } @@ -516,6 +517,17 @@

opacity

opacity_empty

+
  • +
    + + + + + + +
    +

    opacities

    +
  • diff --git a/assets/icons/symbol/sprite.symbol.svg b/assets/icons/symbol/sprite.symbol.svg index 6189a3dcf..2522c4bba 100644 --- a/assets/icons/symbol/sprite.symbol.svg +++ b/assets/icons/symbol/sprite.symbol.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 65d366961..a5eee4d3e 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -9,7 +9,7 @@ L.OpacitiesAction = L.EditAction.extend({ use = 'opacity_empty'; tooltip = overlay.options.translation.makeImageOpaque; } else { - use = 'opacity'; + use = 'opacities'; tooltip = overlay.options.translation.makeImageTransparent; } @@ -30,7 +30,7 @@ L.OpacitiesAction = L.EditAction.extend({ const edit = this._overlay.editing; const link = this._link; - L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty'); + L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty'); L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); edit._toggleOpacity(); }, diff --git a/src/iconsets/ToolbarIconSet.js b/src/iconsets/ToolbarIconSet.js index 343cbc732..f738c0344 100644 --- a/src/iconsets/ToolbarIconSet.js +++ b/src/iconsets/ToolbarIconSet.js @@ -14,6 +14,7 @@ L.ToolbarIconSet = L.IconSet.extend({ '' + '' + '' + + '' + '' + '' + '' + From 311bf9a8818e7957e3292d33d587e4c857616f2a Mon Sep 17 00:00:00 2001 From: themacboy Date: Sat, 22 Oct 2022 04:12:38 +0200 Subject: [PATCH 08/73] posar icona opacities a la barra --- assets/icons/symbol/sprite.symbol.html | 1 + src/edit/actions/OpacityAction.js | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/assets/icons/symbol/sprite.symbol.html b/assets/icons/symbol/sprite.symbol.html index a3746ee41..9b7bdd6db 100644 --- a/assets/icons/symbol/sprite.symbol.html +++ b/assets/icons/symbol/sprite.symbol.html @@ -77,6 +77,7 @@ + diff --git a/src/edit/actions/OpacityAction.js b/src/edit/actions/OpacityAction.js index 9bd421186..52750b722 100644 --- a/src/edit/actions/OpacityAction.js +++ b/src/edit/actions/OpacityAction.js @@ -5,6 +5,8 @@ L.OpacityAction = L.EditAction.extend({ let use; let tooltip; + use = 'opacity'; + /* if (edit._transparent) { use = 'opacity_empty'; tooltip = overlay.options.translation.makeImageOpaque; @@ -12,6 +14,7 @@ L.OpacityAction = L.EditAction.extend({ use = 'opacity'; tooltip = overlay.options.translation.makeImageTransparent; } + */ options = options || {}; options.toolbarIcon = { @@ -21,7 +24,7 @@ L.OpacityAction = L.EditAction.extend({ className: mode === 'lock' ? 'disabled' : '', }; - L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; + //L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; L.EditAction.prototype.initialize.call(this, map, overlay, options); }, @@ -32,6 +35,6 @@ L.OpacityAction = L.EditAction.extend({ L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty'); L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); - edit._toggleOpacity(); + //edit._toggleOpacity(); }, }); From 07c1282312765093bd7dcdf53f1985a6217ac2d0 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sat, 22 Oct 2022 04:35:42 +0200 Subject: [PATCH 09/73] =?UTF-8?q?afegir=20icona=20opacities,=20correcci?= =?UTF-8?q?=C3=B3=20de=20bugs=20i=20rebuild?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/icons/svg-min/opacities.svg | 1 + assets/icons/svg/opacities.svg | 4 ++++ assets/icons/symbol/sprite.symbol.html | 11 +++++++++++ dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacityAction.js | 7 ++----- 6 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 assets/icons/svg-min/opacities.svg create mode 100644 assets/icons/svg/opacities.svg diff --git a/assets/icons/svg-min/opacities.svg b/assets/icons/svg-min/opacities.svg new file mode 100644 index 000000000..cb9b9c6c3 --- /dev/null +++ b/assets/icons/svg-min/opacities.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/svg/opacities.svg b/assets/icons/svg/opacities.svg new file mode 100644 index 000000000..1670362ef --- /dev/null +++ b/assets/icons/svg/opacities.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/icons/symbol/sprite.symbol.html b/assets/icons/symbol/sprite.symbol.html index 9b7bdd6db..539f75b6a 100644 --- a/assets/icons/symbol/sprite.symbol.html +++ b/assets/icons/symbol/sprite.symbol.html @@ -277,6 +277,17 @@

    opacity

    opacity_empty

  • +
  • +
    + + + + + + +
    +

    opacities

    +
  • diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 80edf9e49..d594eeb48 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacities",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacities","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 87efcbacc..2de27bb52 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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.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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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: function(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: function(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove: function(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart: function() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd: function() {\n this._fireEdit();\n },\n\n _fireEdit: function() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners: function() {\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: function() {\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: function(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: function(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: function(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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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","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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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, 'opacities', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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: function(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: function(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove: function(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart: function() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd: function() {\n this._fireEdit();\n },\n\n _fireEdit: function() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners: function() {\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: function() {\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: function(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: function(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: function(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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacityAction.js b/src/edit/actions/OpacityAction.js index 52750b722..9bd421186 100644 --- a/src/edit/actions/OpacityAction.js +++ b/src/edit/actions/OpacityAction.js @@ -5,8 +5,6 @@ L.OpacityAction = L.EditAction.extend({ let use; let tooltip; - use = 'opacity'; - /* if (edit._transparent) { use = 'opacity_empty'; tooltip = overlay.options.translation.makeImageOpaque; @@ -14,7 +12,6 @@ L.OpacityAction = L.EditAction.extend({ use = 'opacity'; tooltip = overlay.options.translation.makeImageTransparent; } - */ options = options || {}; options.toolbarIcon = { @@ -24,7 +21,7 @@ L.OpacityAction = L.EditAction.extend({ className: mode === 'lock' ? 'disabled' : '', }; - //L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; + L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; L.EditAction.prototype.initialize.call(this, map, overlay, options); }, @@ -35,6 +32,6 @@ L.OpacityAction = L.EditAction.extend({ L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty'); L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); - //edit._toggleOpacity(); + edit._toggleOpacity(); }, }); From 4e54a3d68390fad0db6ea99c108dedf19c117c70 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sat, 22 Oct 2022 05:02:49 +0200 Subject: [PATCH 10/73] canvi icona Opacities --- assets/icons/svg-min/opacities.svg | 2 +- assets/icons/svg/opacities.svg | 5 ++--- assets/icons/symbol/sprite.symbol.html | 2 +- assets/icons/symbol/sprite.symbol.svg | 2 +- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/iconsets/ToolbarIconSet.js | 2 +- 7 files changed, 8 insertions(+), 9 deletions(-) diff --git a/assets/icons/svg-min/opacities.svg b/assets/icons/svg-min/opacities.svg index cb9b9c6c3..7823bd994 100644 --- a/assets/icons/svg-min/opacities.svg +++ b/assets/icons/svg-min/opacities.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/svg/opacities.svg b/assets/icons/svg/opacities.svg index 1670362ef..eaac286a3 100644 --- a/assets/icons/svg/opacities.svg +++ b/assets/icons/svg/opacities.svg @@ -1,4 +1,3 @@ - - - + + \ No newline at end of file diff --git a/assets/icons/symbol/sprite.symbol.html b/assets/icons/symbol/sprite.symbol.html index 539f75b6a..a6bbd4c8e 100644 --- a/assets/icons/symbol/sprite.symbol.html +++ b/assets/icons/symbol/sprite.symbol.html @@ -77,7 +77,7 @@ - + diff --git a/assets/icons/symbol/sprite.symbol.svg b/assets/icons/symbol/sprite.symbol.svg index 2522c4bba..44852a740 100644 --- a/assets/icons/symbol/sprite.symbol.svg +++ b/assets/icons/symbol/sprite.symbol.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index d594eeb48..adae2f2b5 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacities",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacities","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacities",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacities","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 2de27bb52..1c16ef512 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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, 'opacities', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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: function(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: function(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove: function(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart: function() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd: function() {\n this._fireEdit();\n },\n\n _fireEdit: function() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners: function() {\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: function() {\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: function(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: function(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: function(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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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, 'opacities', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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: function(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: function(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove: function(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart: function() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd: function() {\n this._fireEdit();\n },\n\n _fireEdit: function() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners: function() {\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: function() {\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: function(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: function(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: function(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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/iconsets/ToolbarIconSet.js b/src/iconsets/ToolbarIconSet.js index f738c0344..c9404c5d2 100644 --- a/src/iconsets/ToolbarIconSet.js +++ b/src/iconsets/ToolbarIconSet.js @@ -14,7 +14,7 @@ L.ToolbarIconSet = L.IconSet.extend({ '' + '' + '' + - '' + + '' + '' + '' + '' + From 8bfc239a0194f1953aaadcfe9a38418db4bc776a Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 05:33:52 +0200 Subject: [PATCH 11/73] probar el sub-menu --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 49 ++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index adae2f2b5..537561f6b 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacities",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacities","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,n,a){var s,r,l=n.editing,c=l._mode;l._transparent?(s="opacity_empty",r=n.options.translation.makeImageOpaque):(s="opacities",r=n.options.translation.makeImageTransparent),(a=a||{}).toolbarIcon={svg:!0,html:s,tooltip:r,className:"lock"===c?"disabled":""},a.subToolbar=new L.Toolbar2({actions:[e,i,o]}),L.DistortableImage.action_map.o="lock"===c?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,n,a)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacities","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){this.map=t,this.myAction=e,L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:"World",tooltip:"See the whole world"}},addHooks:function(){this.map.setView([0,0],0),t.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:"Eiffel Tower",tooltip:"Go to the Eiffel Tower"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),t.prototype.addHooks.call(this)}}),o=t.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 1c16ef512..b9b73519c 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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, 'opacities', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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: function(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: function(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove: function(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart: function() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd: function() {\n this._fireEdit();\n },\n\n _fireEdit: function() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners: function() {\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: function() {\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: function(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: function(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: function(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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [World, Eiffel, Cancel],\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, 'opacities', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n\n\nvar ImmediateSubAction = L.Toolbar2.Action.extend({\n initialize: function(map, myAction) {\n this.map = map;\n this.myAction = myAction;\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks: function() {\n this.myAction.disable();\n },\n});\n\nvar World = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: 'World',\n tooltip: 'See the whole world',\n },\n },\n addHooks: function() {\n this.map.setView([0, 0], 0);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\nvar Eiffel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: 'Eiffel Tower',\n tooltip: 'Go to the Eiffel Tower',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\nvar Cancel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","World","Eiffel","Cancel","o","link","ImmediateSubAction","myAction","setView","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index a5eee4d3e..5a570e814 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -21,6 +21,10 @@ L.OpacitiesAction = L.EditAction.extend({ className: mode === 'lock' ? 'disabled' : '', }; + options.subToolbar = new L.Toolbar2({ + actions: [World, Eiffel, Cancel], + }); + L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; L.EditAction.prototype.initialize.call(this, map, overlay, options); @@ -35,3 +39,48 @@ L.OpacitiesAction = L.EditAction.extend({ edit._toggleOpacity(); }, }); + + +var ImmediateSubAction = L.Toolbar2.Action.extend({ + initialize: function(map, myAction) { + this.map = map; + this.myAction = myAction; + L.Toolbar2.Action.prototype.initialize.call(this); + }, + addHooks: function() { + this.myAction.disable(); + }, +}); + +var World = ImmediateSubAction.extend({ + options: { + toolbarIcon: { + html: 'World', + tooltip: 'See the whole world', + }, + }, + addHooks: function() { + this.map.setView([0, 0], 0); + ImmediateSubAction.prototype.addHooks.call(this); + }, +}); +var Eiffel = ImmediateSubAction.extend({ + options: { + toolbarIcon: { + html: 'Eiffel Tower', + tooltip: 'Go to the Eiffel Tower', + }, + }, + addHooks: function() { + this.map.setView([48.85815, 2.29420], 19); + ImmediateSubAction.prototype.addHooks.call(this); + }, +}); +var Cancel = ImmediateSubAction.extend({ + options: { + toolbarIcon: { + html: '', + tooltip: 'Cancel', + }, + }, +}); From cfc2e1f2b98cfd52ff07d53cfbdc177ee6950c76 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 05:44:03 +0200 Subject: [PATCH 12/73] sub-menu test 1 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 7 ++++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 537561f6b..ab420616f 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,n,a){var s,r,l=n.editing,c=l._mode;l._transparent?(s="opacity_empty",r=n.options.translation.makeImageOpaque):(s="opacities",r=n.options.translation.makeImageTransparent),(a=a||{}).toolbarIcon={svg:!0,html:s,tooltip:r,className:"lock"===c?"disabled":""},a.subToolbar=new L.Toolbar2({actions:[e,i,o]}),L.DistortableImage.action_map.o="lock"===c?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,n,a)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacities","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){this.map=t,this.myAction=e,L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:"World",tooltip:"See the whole world"}},addHooks:function(){this.map.setView([0,0],0),t.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:"Eiffel Tower",tooltip:"Go to the Eiffel Tower"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),t.prototype.addHooks.call(this)}}),o=t.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,n,a){var s,r,l=n.editing,c=l._mode;l._transparent?(s="opacity_empty",r=n.options.translation.makeImageOpaque):(s="opacities",r=n.options.translation.makeImageTransparent),(a=a||{}).toolbarIcon={svg:!0,html:s,tooltip:r,className:"lock"===c?"disabled":""},a.subToolbar=new L.Toolbar2({actions:[e,i,o]}),L.setOptions(this,a),L.EditAction.prototype.initialize.call(this,t,n,a)},addHooks:function(){var t=this._link;L.IconUtil.toggleXlink(t,"opacities","opacity_empty"),L.IconUtil.toggleTitle(t,"Make Image Transparent","Make Image Opaque")}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){this.map=t,this.myAction=e,L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:"World",tooltip:"See the whole world"}},addHooks:function(){this.map.setView([0,0],0),t.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:"Eiffel Tower",tooltip:"Go to the Eiffel Tower"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),t.prototype.addHooks.call(this)}}),o=t.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 b9b73519c..2f4102f56 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [World, Eiffel, Cancel],\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, 'opacities', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n\n\nvar ImmediateSubAction = L.Toolbar2.Action.extend({\n initialize: function(map, myAction) {\n this.map = map;\n this.myAction = myAction;\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks: function() {\n this.myAction.disable();\n },\n});\n\nvar World = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: 'World',\n tooltip: 'See the whole world',\n },\n },\n addHooks: function() {\n this.map.setView([0, 0], 0);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\nvar Eiffel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: 'Eiffel Tower',\n tooltip: 'Go to the Eiffel Tower',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\nvar Cancel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","World","Eiffel","Cancel","o","link","ImmediateSubAction","myAction","setView","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":"kCAAAA,EAAEC,sBAAwBD,EAAEE,aAAaC,OAAO,CAC9CC,QAAS,CACPC,UAAU,EACVC,WAAY,CACVC,eAAgB,iCAChBC,UAAW,0BACXC,UAAW,kCAIfC,WAV8C,SAUnCN,GACTJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEE,aAAaW,UAAUH,WAAWI,KAAKF,KAAMR,GAC/CJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAKP,SAAWO,KAAKR,QAAQC,UAG/BY,MAlB8C,SAkBxCC,GACJlB,EAAEE,aAAaW,UAAUI,MAAMH,KAAKF,KAAMM,GAE1CN,KAAKO,KAAOD,EAERN,KAAKP,UAAYO,KAAKQ,QAAQC,SAMlCT,KAAKU,GAAG,WAAYV,KAAKW,WAAYX,MACrCA,KAAKU,GAAG,cAAeV,KAAKY,cAAeZ,OAG7Ca,SAjC8C,WAkCxCb,KAAKQ,SAAWR,KAAKQ,QAAQM,UAEjCd,KAAKe,IAAI,WAAYf,KAAKW,WAAYX,MACtCA,KAAKe,IAAI,cAAef,KAAKY,cAAeZ,OAG9CW,WAxC8C,SAwCnCK,GACT,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASR,GAAGO,EAAO,CACnBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASR,GAAGO,EAAMM,aAAc,CAChCC,UAAWxB,KAAKyB,gBAEhBC,YAAa1B,KAAK2B,uBACjB3B,OAGLY,cAvD8C,SAuDhCI,GACZ,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASH,IAAIE,EAAO,CACpBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASH,IAAIE,EAAMM,aAAc,CACjCC,UAAWxB,KAAKyB,gBAChBC,YAAa1B,KAAK2B,uBACjB3B,OAGL2B,sBArE8C,SAqExBX,GAAG,WAClBhB,KAAKP,WAEVuB,EAAEY,iBAEF5B,KAAK6B,WAAU,SAACZ,GACd,IAAMa,EAAOb,EAAMT,QACfS,EAAMM,eAAiBP,EAAEe,QAAUD,EAAKE,YAC1C5C,EAAE6C,QAAQC,YAAYjB,EAAMM,aAAc,aACtC,EAAKY,gBACPlB,EAAMmB,WACN,EAAK5B,QAAQ6B,eAEb,EAAK7B,QAAQ8B,uBAMrBC,YAxF8C,SAwFlCC,GACV,OAAOpD,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAGlDY,aA5F8C,WA8F5C,OADiBnC,KAAK0C,YACNC,KAAK3C,KAAKuC,YAAYK,KAAK5C,QAG7C6C,iBAjG8C,SAiG7B7B,EAAGC,GACdD,EAAE8B,UAEA7B,EAAMT,QAAQwB,WAChB5C,EAAE6C,QAAQC,YAAYlB,EAAEe,OAAQ,aAIhC/B,KAAKmC,eAAkBlB,EAAMmB,WAC1BpC,KAAKQ,QAAQ8B,kBAGtBb,gBA7G8C,SA6G9BT,GAAG,WACZhB,KAAKP,WAEVO,KAAK6B,WAAU,SAACZ,GACVA,EAAMM,eAAiBP,EAAEe,OAC3Bd,EAAMmB,WAEN,EAAKS,iBAAiB7B,EAAGC,MAIzBD,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCI,mBA3H8C,SA2H3BJ,GACjB,IAEIgC,EAFER,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAGZP,KAAKuC,YAAYC,IAEtBxC,KAAK6B,WAAU,SAACZ,GAGd,IAFAA,EAAMgC,iBAAmB,GACzBhC,EAAMmB,WACDY,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACtB,IAAIE,EAAIjC,EAAMkC,UAAUH,GACxB/B,EAAMgC,iBAAiBD,GAAK1C,EAAI8C,mBAAmBF,QAKzD5B,cA5I8C,SA4IhCN,GACZ,IAAMwB,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAEjB,GAAKP,KAAKuC,YAAYC,GAAtB,CAEA,IAAMa,EAAU/C,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDG,EAAQd,EAAQS,iBAAiB,GAAGM,SAASF,GAEnDrD,KAAKwD,4BAA4BF,EAAOd,KAG1CiB,UAxJ8C,WAwJlC,WAGV,OAFiBzD,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAQ,EAAKrB,YAAYtB,IAAmB,SAAT0C,MAIvCE,QAjK8C,SAiKtCrB,GAAS,WAGf,OAFiBxC,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAO3C,IAAUuB,GAAW,EAAKD,YAAYtB,IAAmB,SAAT0C,MAI3DH,4BA1K8C,SA0KlBF,EAAOd,GACjC,IAEIQ,EAFEc,EAAe9D,KAAK6D,QAAQrB,GAC5BuB,EAAI,IAAI3E,EAAE4E,eAAe,GAAIV,EAAMW,EAAG,GAAIX,EAAMY,GAGtDJ,EAAaK,SAAQ,SAAClD,GACpB,IAAImD,EAAc,GAClB,IAAKpB,EAAI,EAAGA,EAAI,EAAGA,IACjBoB,EAAYpB,GAAKe,EAAEM,UAAUpD,EAAMgC,iBAAiBD,IAEtD/B,EAAMqD,qBAAqBF,OAI/BG,kBAxL8C,SAwL5BC,GAIhB,OAHeA,EAAKC,QAAO,SAASC,EAAKC,GACvC,OAAOD,EAAMC,EAAIC,eAChB,GACaJ,EAAKK,QAGvBC,mBA/L8C,WAgM5C,IAAMC,EAAO,CACbA,OAAc,IA4Bd,OA1BA/E,KAAK6B,WAAU,SAASZ,GACtB,GAAIjB,KAAKuC,YAAYtB,GAAQ,CAC3B,IAAI+D,EAAW/D,EAAMgE,OAAOC,IAAIC,MAAM,KAClCC,EAAWJ,EAASA,EAASH,OAAO,GACpCQ,EAAKpE,EAAMqE,aACXC,EAAU,CACZ,CAACC,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,MAE9BX,EAAKY,OAAOC,KAAK,CACfC,GAAI7F,KAAK8F,WAAW7E,GACpBiE,IAAKjE,EAAMgE,OAAOC,IAClBa,MAAO9E,EAAMgE,OAAOc,MACpBC,OAAQ/E,EAAMgE,OAAOe,OACrBC,gBAAiBb,EACjBc,MAAOX,EACPX,aAAcxF,EAAE+G,UAAUC,cAAcnF,QAG3CjB,MAEH+E,EAAKY,OAASZ,EAAKY,OAAOU,UAC1BtB,EAAKuB,iBAAmBtG,KAAKuE,kBAAkBQ,EAAKY,QAE7CZ,KAIX3F,EAAEmH,sBAAwB,SAASV,EAAIrG,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBwG,EAAIrG,K,eClOzCJ,EAAEoH,wBAA0BpH,EAAEqH,aAAalH,OAAO,CAEhDC,QAAS,CACPwG,OAAQ,IACRU,aAAa,EAEbC,aAAc,GACdlH,UAAU,EACVkE,KAAM,UACNiD,UAAU,GAGZ9G,WAZgD,SAYrC+G,EAAKrH,GACdJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAK2G,aAAe3G,KAAKR,QAAQmH,aACjC3G,KAAKP,SAAWO,KAAKR,QAAQC,SAC7BO,KAAK8G,UAAY9G,KAAKR,QAAQoH,SAC9B5G,KAAK+G,KAAOF,EACZ7G,KAAKgH,SAAW,IAGlB3G,MAvBgD,SAuB1CC,GAAK,WACTN,KAAKO,KAAOD,EACPN,KAAKuB,cAAgBvB,KAAKiH,aAE/B3G,EAAII,GAAG,YAAaV,KAAKkH,OAAQlH,MAE7BA,KAAKR,QAAQ+F,UACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QACzBjF,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAYV,KAAKuH,aAAcvH,OAK1CZ,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAAQ,WAIvC,GAHA,EAAKiG,UAAUC,YAAY,EAAKlG,cAChC,EAAKmG,uBAED,EAAKlI,QAAQwH,SAAU,CACzB,IAAMW,EAAQ,EAAKnI,QAAQwH,SAASY,IAAM,MAAQ,MAClD,EAAKC,SAAS,EAAKrI,QAAQwH,SAASW,GAAQA,QAE5C,EAAKX,SAAW,CAACY,IAAK,EAAGE,IAAK,GAC9B,EAAKZ,SAIF,EAAKC,UACJ7G,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAY,EAAK6G,aAAc,GAK1C,IAAMQ,EAAe,EAAKC,cACtBD,GACF,EAAKE,GAAKF,EAAaG,OAAOC,KAAKJ,GAAc,IAC7C,EAAKE,GAAGxI,UAAY,EAAKe,QAAQC,WAEjC,EAAKhB,UAAY,EAAKe,QAAQC,SAClC,EAAKwH,GAAK,SAId7I,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACvDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MAMGM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAG7CA,KAAK6I,KAAK,QAGZhI,SArFgD,SAqFvCP,GACPlB,EAAE8B,SAASH,IAAIf,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACxDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MACHZ,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAExCA,KAAKQ,SAAWR,KAAKQ,QAAQM,UACjCd,KAAK6I,KAAK,UAEVzJ,EAAEqH,aAAaxG,UAAUY,SAASX,KAAKF,KAAMM,IAG/CoH,qBApGgD,WAqG9C,IAAMpH,EAAMN,KAAKO,KACXuI,EAAqB1J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,SAC3DyH,EAAsB5J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,UAC5D0H,EACFC,SAASJ,GAAsBI,SAASF,GACtCG,EAAcnJ,KAAKR,QAAQwG,OAC3BoD,EAAaF,SAASD,EAAcE,GACpCE,EAAS/I,EAAIgJ,QAAQhJ,EAAIiJ,aACzBC,EAASpK,EAAEqK,MAAML,EAAYD,GAAaO,SAAS,GACrD1J,KAAKR,QAAQ+F,QACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QAE7BvF,KAAKmH,SAAW,CACd7G,EAAIqJ,UAAUN,EAAO9F,SAASiG,IAC9BlJ,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIJ,KAI7BxJ,KAAK6J,mBAAqB,CACxB,OAAUR,EACV,OAAUG,EACV,KAAQlJ,EAAIwJ,WAGd9J,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,gBAGrCoD,aAlIgD,SAkInC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKoC,YAIvCkG,sBAvIgD,WAwI9C,IAAMhI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAC5CZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKoC,SAAUpC,OAGnDwI,qBA7IgD,WA8I9C,IAAMlI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAC3CZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKoC,SAAUpC,OAGpDkK,WAnJgD,WAoJ9C,OAAOlK,KAAK8G,WAGd1E,SAvJgD,WAwJ9C,IAAMN,EAAO9B,KAAKQ,QAClB,GAAKsB,EAAKE,UAOV,OALAF,EAAKQ,iBACLR,EAAKqI,eAELnK,KAAK8G,WAAY,EACjB9G,KAAK6I,KAAK,YACH7I,MAGToI,OAnKgD,SAmKzCpH,GACL,IAAMc,EAAO9B,KAAKQ,QACZyH,EAAKjI,KAAKiI,GAEhB,GAAKnG,EAAKE,UAAV,CAYA,GAXIhB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,GAGpChB,KAAKoK,wBAELpK,KAAK8G,WAAY,EACjBhF,EAAKO,cACLP,EAAKuI,eACLrK,KAAK6I,KAAK,WAGNZ,IAAMA,EAAG9F,eAKb,OAAOnC,KAJLA,KAAKoC,aAOTgI,sBA3LgD,WA4L9CpK,KAAKO,KAAKsB,WAAU,SAACZ,GACfA,aAAiB7B,EAAEoH,yBACrBvF,EAAMmB,eAKZkI,UAnMgD,SAmMtCC,EAAQC,GAChB,IAAM1I,EAAO9B,KAAKQ,QAalB,OAXAR,KAAKmH,SAASoD,GAAUC,EAExBxK,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT8K,sBApNgD,SAoN1BC,EAAMR,EAAQjK,GAClC,OAAIA,EAAId,QAAQwL,IAAIC,QAAU7L,EAAE8L,IAAID,SAKrB,IAATF,GACFI,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI,EACrCkH,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,GAAK,MAEzCiH,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI6G,EAAO,EAC5CK,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,EAAImH,KAAKC,IAAI,EAAGP,IAAS,KAEvDI,GAAcC,GATtB,IAAID,EACAC,GAYRG,WArOgD,SAqOrCC,GACT,IAAMlL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAGR,IAAK,IAAIyI,KAAKD,EACZ,GAAIxL,KAAK8K,sBAAsBC,EAAMS,EAAUC,GAAInL,GAIjD,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAI4C,KAAKD,EACZxL,KAAKmH,SAASnE,GAAKwI,EAAUC,GAC7BzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGTsE,qBAtQgD,SAsQ3BoH,GACnB,IAAMpL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAER,IAAK,IAAIyI,KAAKC,EAAW,CACvB,IAAMnB,EAASjK,EAAIqL,mBAAmBD,EAAUD,IAEhD,GAAIzL,KAAK8K,sBAAsBC,EAAMR,EAAQjK,GAI3C,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAI4C,KAAKC,EACZ1L,KAAKmH,SAASnE,GAAK1C,EAAIqL,mBAAmBD,EAAUD,IACpDzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT4L,QAxSgD,SAwSxCC,GACN,IAEI7I,EACAe,EAHEzD,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAG5BuC,EAAgB,GAEpB,GAAc,IAAVD,EAAJ,CAEA,IAAK7I,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EACCgJ,QAAQtJ,KAAKmD,UAAUH,IACvBO,SAAS8F,GACT0C,WAAWF,GACXjC,IAAIP,GACTyC,EAAc9I,GAAK1C,EAAIqJ,UAAU5F,GAKnC,OAFA/D,KAAKuL,WAAWO,GAET9L,OAGTgM,SA/TgD,WA+TzB,IAAdC,EAAc,uDAAP,MACRC,EAASlM,KAAKuB,aAAa4K,MAAM/M,EAAE6C,QAAQmK,WAC5CjH,MAAM,YAAY,GAClBkH,MAAM,GAAI,GACVlH,MAAM,KAELmH,EAAQJ,EAAO,GACfK,EAAQL,EAAO,GACfM,EAAQN,EAAO,GACfO,EAAQP,EAAO,GAEfQ,EAAcJ,EAAQG,EAAQF,EAAQC,EAExCG,EAAQvN,EAAEwN,SAASC,UAAUP,EAAOC,EAAO,OAU/C,OARIG,EAAc,IAChBC,GAASA,EAAQ,EAAItB,KAAKyB,IAAMzB,KAAKyB,IAGnCH,EAAQ,IACVA,EAAQ,EAAItB,KAAKyB,GAAKH,GAGR,QAATV,EACHZ,KAAK0B,MAAM3N,EAAEwN,SAASI,iBAAiBL,IACvCvN,EAAE6N,KAAKC,UAAUP,EAAO,IAG9B9E,SA3VgD,SA2VvC8E,GAAqB,IAAdV,EAAc,uDAAP,MACfkB,EAAenN,KAAKgM,SAASC,GAC7BmB,EAAkBT,EAAQQ,EAGhC,OAFAnN,KAAKqN,SAASD,EAAiBnB,GAExBjM,MAGTqN,SAnWgD,SAmWvCV,GAAqB,IAIxB3J,EACAe,EACAuJ,EANUrB,EAAc,uDAAP,MACf3L,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAC5BhE,EAAU,GASd,IAJa,QAAT0G,IACFU,EAAQvN,EAAEwN,SAASW,iBAAiBZ,IAGjC3J,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAAS8F,GAC5CiE,EAAIlO,EAAEqK,MACF4B,KAAKmC,IAAIb,GAAS5I,EAAEE,EAAIoH,KAAKoC,IAAId,GAAS5I,EAAEG,EAC5CmH,KAAKoC,IAAId,GAAS5I,EAAEE,EAAIoH,KAAKmC,IAAIb,GAAS5I,EAAEG,GAEhDqB,EAAQvC,GAAK1C,EAAIqJ,UAAU2D,EAAE1D,IAAIP,IAKnC,OAFArJ,KAAKuL,WAAWhG,GAETvF,MAGT0N,OA7XgD,SA6XzCC,EAAaC,GAClB,IACI5K,EACAe,EAFEzD,EAAMN,KAAKO,KAGbsN,EAAe,GACbvK,EAAQhD,EAAIgJ,QAAQqE,GAAapK,SAASjD,EAAIgJ,QAAQsE,IAE5D,IAAK5K,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAASD,GAC5CuK,EAAa7K,GAAK1C,EAAIqJ,UAAU5F,GAGlC/D,KAAKuL,WAAWsC,IAGlBC,QA5YgD,WAwZ9C,IAXA,IAAMxN,EAAMN,KAAKO,KACX8I,EAASrJ,KAAK6J,mBAAmBR,OACjCG,EAASxJ,KAAK6J,mBAAmBL,OACjCuB,EAAO/K,KAAK6J,mBAAmBkB,KAC/BxF,EAAU,CACd8D,EAAO9F,SAASiG,GAChBH,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,IACrCmF,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,IACrCmF,EAAOO,IAAIJ,IAGJxG,EAAI,EAAGA,EAAI,EAAGA,IAChB1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,GAAMgD,OAAO/N,KAAKmD,UAAUH,KACzDhD,KAAKsK,UAAUtH,EAAG1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,IAOhD,OAHA/K,KAAK6K,QAAS,EACd7K,KAAK6I,KAAK,WAEH7I,MAKTgO,oBAtagD,SAsa5BvE,GAOlB,IAAMwE,EAAO7O,EAAEiI,QAAQ6G,SAEjBC,GAASF,EAAO,KAAO,IAAM,IAEnC,MAHa,aAAeA,EAAO,KAAO,IAAM,IAGlCxE,EAAMxF,EAAI,MAAQwF,EAAMvF,EAAI,KAAOiK,GAGnDjH,OApbgD,WAqb9C,IAAM5G,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACb6B,EAAqBhE,EAAEwD,KAAKtC,EAAI8C,mBAAoB9C,GACpD+N,EAAkBrO,KACnBsO,8BAA8BlL,GAC7BC,EAAUD,EAAmBpD,KAAKmD,UAAU,IAC5CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,KAK5DP,EAAMjC,MAAM/M,EAAE6C,QAAQmK,UAAY,WAAa,QAE/CpM,KAAKgH,SAASY,IAAM5H,KAAKgM,WACzBhM,KAAKgH,SAASc,IAAM9H,KAAKgM,SAAS,QASpCzE,aAldgD,SAkdnCqH,GACX,IAAMtO,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACbsN,EAAwB,SAASrE,GACrC,OAAOlK,EAAIwO,uBAAuBtE,EAAQoE,EAAM7D,KAAM6D,EAAMvF,SAExDgF,EAAkBrO,KAAKsO,8BACzBO,GAEExL,EAAUwL,EAAsB7O,KAAKmD,UAAU,IAC/CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,MAG9DrJ,WAregD,WAse9C,OAAOtF,KAAKmH,UAGdhE,UAzegD,SAyetCH,GACR,OAAOhD,KAAKmH,SAASnE,IAIvBuG,UA9egD,WA+e9C,IAAMjJ,EAAMN,KAAKO,KACXkE,EAASzE,KAAKsF,aAAab,QAAO,SAASsK,EAAKxE,GACpD,OAAOwE,EAAInF,IAAItJ,EAAIgJ,QAAQiB,MAC1BnL,EAAEqK,MAAM,EAAG,IACd,OAAOnJ,EAAIqJ,UAAUlF,EAAOiF,SAAS,KAGvC4E,8BAtfgD,SAsflBU,GAI5B,IAIIC,EAJEzF,EAASwF,EAAkBhP,KAAKmD,UAAU,IAC1C+L,EAAIlP,KAAKuB,aAAa4N,aAAe,IACrCC,EAAIpP,KAAKuB,aAAa8N,cAAgB,IACxCnM,EAAI,GAGR,IAAK+L,EAAI,EAAGA,EAAI,EAAGA,IACjB/L,EAAE0C,KAAKoJ,EAAkBhP,KAAKmD,UAAU8L,IAAIK,UAAU9F,IAcxD,OAAOpK,EAAEmQ,WAAWC,oBAChB,EAAG,EAAGtM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAG,EAAGhM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnB,EAAGkL,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAGE,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,MAK3B9E,EAAEqQ,wBAA0B,SAAS5J,EAAIrG,GACvC,OAAO,IAAIJ,EAAEoH,wBAAwBX,EAAIrG,IAG3CJ,EAAEsQ,IAAIC,aAAY,WACXvQ,EAAE6C,QAAQQ,SAASzC,KAAK4P,eAAgB,QAC3CxQ,EAAE6C,QAAQ4N,SAAS7P,KAAK4P,eAAgB,W,0BC9hB5CxQ,EAAE6C,QAAU7C,EAAE6C,SAAW,GACzB7C,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBqF,UAAY3Q,EAAE4Q,QAAQzQ,OAAO,CAE9CC,QAAS,CACPyQ,SAAU,YAGZnQ,WAN8C,SAMnCQ,EAAKd,GACdQ,KAAKO,KAAOD,EACZlB,EAAEW,WAAWC,KAAMR,IAGrB0Q,SAX8C,WAYvClQ,KAAKmQ,aACRnQ,KAAKoQ,WAAapQ,KAAKqQ,kBACvBrQ,KAAKsQ,eAAiBtQ,KAAKuQ,QAC3BvQ,KAAKwQ,SAAWxQ,KAAKyQ,gBACrBzQ,KAAK0Q,WAAW1Q,KAAKoQ,WAAYpQ,KAAKsQ,eAAgBtQ,KAAKwQ,UAE3DpR,EAAE8B,SAASR,GAAGV,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE7DZ,EAAE8B,SAAS0P,wBAAwB5Q,KAAKoQ,YACxChR,EAAE8B,SAAS2P,yBAAyB7Q,KAAKoQ,cAI7CU,YAzB8C,WA0BxC9Q,KAAKmQ,aACP/Q,EAAE8B,SAASH,IAAIf,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE9DZ,EAAE6C,QAAQ8O,OAAO/Q,KAAKwQ,UACtBpR,EAAE6C,QAAQ8O,OAAO/Q,KAAKsQ,gBACtBlR,EAAE6C,QAAQ8O,OAAO/Q,KAAKoQ,YACtBpQ,KAAKmQ,YAAa,IAItBE,gBApC8C,WAqC5C,IAAMW,EAAY5R,EAAE6C,QAAQgP,OAAO,MAAO,sBAC1CD,EAAUE,aAAa,KAAM,iBAE7B,IAAMC,EAAU/R,EAAE6C,QAAQgP,OAAO,KAAM,WAGvC,OAFAD,EAAUvJ,YAAY0J,GAEfH,GAGTP,cA9C8C,WA+C5C,IAAMW,EAAUhS,EAAE6C,QAAQgP,OAAO,IAAK,IAUtC,OATAG,EAAQC,UAAYjS,EAAEkS,SAASL,OAAO,iBAEtCG,EAAQF,aAAa,KAAM,oBAC3BE,EAAQF,aAAa,OAAQ,KAC7BE,EAAQF,aAAa,QAAS,eAE9BE,EAAQF,aAAa,OAAQ,UAC7BE,EAAQF,aAAa,aAAc,eAE5BE,GAGTb,MA5D8C,WA6D5C,IAAMgB,EAAOnS,EAAE6C,QAAQgP,OAAO,MAAO,IAIrC,OAHAM,EAAKL,aAAa,KAAM,qBACxBK,EAAKpF,MAAMqF,QAAU,OAEdD,GAGTb,WApE8C,SAoEnCM,EAAWO,EAAME,GAC1BzR,KAAKmQ,WAAa/Q,EAAEsS,QAAQ,CAACzB,SAAUjQ,KAAKR,QAAQyQ,WAEpDjQ,KAAKmQ,WAAW9P,MAAQ,WAuBtB,OAtBA2Q,EAAUvJ,YAAY8J,GACtBA,EAAKI,mBACD,YACA,k3CAkBJX,EAAUvJ,YAAYgK,GACfT,GAGThR,KAAKmQ,WAAWyB,MAAM5R,KAAKO,OAG7BoQ,iBApG8C,SAoG7B3P,GACfA,EAAEY,iBAEF5B,KAAKoQ,WAAWyB,UACgB,kCAA9B7R,KAAKoQ,WAAWyB,UACd,qCACA,gCAGJ7R,KAAKsQ,eAAenE,MAAMqF,QACc,SAAtCxR,KAAKsQ,eAAenE,MAAMqF,QAAqB,QAAU,OAG3DxR,KAAKwQ,SAASa,UACgB,UAA5BrR,KAAKwQ,SAASa,UACZjS,EAAEkS,SAASL,OAAO,iBAClB,QAGJ7R,EAAEkS,SAASQ,YAAY9R,KAAKwQ,SAAU,cAAe,eACrDpR,EAAE6C,QAAQC,YAAYlC,KAAKwQ,SAAU,eAGvCuB,eA3H8C,WA4H5C,IAAIC,SAASC,cAAc,sBAA3B,CAEA,IAAMC,EAAK9S,EAAE6C,QAAQgP,OAAO,MAAO,IACnCiB,EAAGrM,GAAK,oBACRqM,EAAGhB,aAAa,SAAU,UAE1BlR,KAAKmS,UAAW,IAAI/S,EAAEgT,kBAAmBC,SACzCH,EAAGb,UAAYrR,KAAKmS,SAEpBH,SAASC,cAAc,8BAA8BxK,YAAYyK,OAIrE9S,EAAEsL,iBAAiBqF,UAAUJ,aAAY,WACvCvQ,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACrClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACvClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GAAK,EAC5C,EAGgD,IAA9ClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,IAAalT,EAAEiI,QAAQkL,SAChE,EAAK9R,SACL,EAAKsR,qBAIT3S,EAAE0Q,iBAAiB0C,UAAY,SAAClS,EAAKd,GACnC,OAAO,IAAIJ,EAAEsL,iBAAiBqF,UAAUzP,EAAKd,K,eC3J/CJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEC,sBAAsBoT,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CAC9CC,QAAS,CACPkT,OAAQtT,EAAE0Q,iBAAiB6C,kBAG7B7S,WAL8C,SAKnC8S,EAAOpT,GAChBQ,KAAK6S,OAASD,EACd5S,KAAK8S,YAAcF,EAAMpT,QAAQE,WAEjCN,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB6C,iBAAiBI,OAAS,iBAG/C7C,SAd8C,WAe5C,IACM5P,EADQN,KAAK6S,OACDtS,KAElBP,KAAKgT,YAAchT,KAAKR,QAAQyT,QAChCjT,KAAKkT,YACD9T,EAAEwD,KAAKxD,EAAEe,MAAMgT,aAAanT,KAAM,cAAe,aACjDA,KAAKoT,YAAapT,MAEtBZ,EAAE8B,SAASR,GAAGsR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE9CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAGlDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQC,aAG/CqQ,YAxC8C,WAyC5C,IACMxQ,EADQN,KAAK6S,OACDtS,KAElBnB,EAAE8B,SAASH,IAAIiR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE/CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MAGnDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAKsT,gBACLtT,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQM,cAG/CL,OA9D8C,WAiE5C,OAFAT,KAAKyT,UAAW,EAChBzT,KAAKkQ,WACElQ,MAGTc,QApE8C,WAuE5C,OAFAd,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAGTqT,WA1E8C,SA0EnCrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KAExB3T,KAAK0T,IAEN1T,KAAK6S,OAAO1Q,gBACdnC,KAAK0T,GAAaxT,KAAKF,OAI3B0I,aArF8C,SAqFjC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKsT,cAActS,IAIrDsH,sBA1F8C,WA2F5C,IAAMhI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MACjDZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKsT,cAAetT,OAGxDwI,qBAhG8C,WAiG5C,IAAMlI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAChDZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKsT,cAAetT,OAGzDsT,cAtG8C,SAsGhCtS,GACZ,IAAI4S,EAEA5S,IAAK4S,EAAK5S,EAAE6S,eAKZD,IAAOA,EAAG9Q,UAAY8Q,EAAG7R,kBAAkB+R,oBAI/C9T,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB7B,EAAE6C,QAAQ8R,YAAY9S,EAAMM,aAAc,aAC1CN,EAAMmB,cAGRpC,KAAKsC,iBAEDtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCgT,aA5H8C,WA4H/B,WACRhU,KAAKiU,QAAQ7U,EAAE8U,eAEpBlU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd2T,UAELlT,EAAMmB,gBAKZgS,WAzI8C,WAyIjC,WACNpU,KAAKiU,QAAQ7U,EAAEiV,aAEpBrU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd8T,QAELlV,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CiS,gBAtJ8C,SAsJ9BxS,GAAG,WACXuT,EAAMvT,EAAEwT,iBACRlU,EAAMN,KAAK6S,OAAOtS,KAExBP,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB,IAAMa,EAAOb,EAAMT,QAEfS,EAAMiJ,cAAgBjJ,EAAMmB,WAEhC,IAAM2I,EAAOzK,EAAIwJ,UACXT,EAAS/I,EAAIiJ,YACfkL,EAAYrV,EAAE4K,aAAa/I,EAAMkC,UAAU,GAAIlC,EAAMkC,UAAU,IAEnEsR,EAAYnU,EAAIoU,8BAA8BD,EAAW1J,EAAM1B,GAC3DkL,EAAII,WAAWF,IAAc3S,EAAKE,YAC/B,EAAKyI,SAAW,EAAKpI,cAC1BjD,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CqT,aA3K8C,SA2KjC5T,GAAG,WACd,GAAKhB,KAAKiU,QAAQ7U,EAAEyV,cAApB,CAEA,IAAMC,EAAiB9U,KAAK6S,OAAOpP,YAC7BsR,EAAID,EAAejQ,OAEf,IAANkQ,IAEW3V,EAAE6C,QAAQ+S,eAAeD,KAGtCD,EAAe3Q,SAAQ,SAAClD,GACtB,EAAK4R,OAAOoC,YAAYhU,MAErBjB,KAAK6S,OAAO1Q,gBACfnC,KAAKsC,kBAILtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,MAGtCkU,aAjM8C,WAkMvClV,KAAKmV,mBACRnV,KAAK8S,YAAYsC,gBAAaC,GAGhCC,cAActV,KAAKuV,iBAGrBlT,YAzM8C,WA0M5C,IAAMuQ,EAAQ5S,KAAK6S,OACbvS,EAAMsS,EAAMrS,KAEdqS,EAAMpT,QAAQgW,iBAAmBxV,KAAKyK,UAE1CzK,KAAKyK,QAAUrL,EAAE0Q,iBAAiB2F,WAAW,CAC3CxC,QAASjT,KAAKgT,YACd/C,SAAU,YACT2B,MAAMtR,EAAKsS,KAGhBtQ,eArN8C,WAsN5C,IAAMhC,EAAMN,KAAK6S,OAAOtS,KACxB,IAAIP,KAAKyK,QAIP,OAAO,EAHPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,GAMnBwJ,QA/N8C,SA+NtCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDE,QAnO8C,SAmOtCF,GAMN,MALwB,yBAApBA,EAAMG,WAAyC7V,KAAKiU,QAAQyB,KAC9D1V,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,eAEArC,MAGT8V,WA5O8C,SA4OnCJ,GAAO,WAWhB,OAVA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,OAAI,EAAKhD,YAAYgD,KAASN,IAC5B,EAAKpT,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,eACE,MAKJrC,MAGToT,YA1P8C,WA0PhC,WACZ,GAAKpT,KAAKiU,QAAQ7U,EAAE8W,cAEpB,OAAO,IAAIC,SAAQ,SAACC,GAClB,IAGIxW,EAHEyW,EAAO,EAAKvD,YAClBuD,EAAKD,QAAUA,EAGf,EAAKb,eAAiB,KAmEtB,EAAKJ,mBAAqBkB,EAAKjB,WAC1B,EAAKD,mBACRkB,EAAKjB,WAAa,EAAKvC,OAAO/N,qBAAqBa,QAGrD0Q,EAAKC,UAAYD,EAAKC,WAAa,IACnCD,EAAKxK,MAAQwK,EAAKxK,OAAS,IAC3BwK,EAAKE,QAAUF,EAAKE,SAvEI,SAACC,IACvBA,EAAOC,KAAKC,MAAMF,IAETG,aACH/W,IAAc4W,EAAKG,YAAcH,EAAKG,WAAWC,MAAM,WAIzDhX,EAAY4W,EAAKG,YAIC,aAAhBH,EAAKK,SACPvB,cAAc,EAAKC,gBAEd,EAAKJ,mBACR,EAAKrC,YAAYsC,gBAAaC,GAGhCe,IACiB,OAAbI,EAAKM,KACPC,MAAM,qBAAuBV,EAAKxW,UAAY2W,EAAKM,MAMvDE,QAAQC,IAAIT,KA6ChBH,EAAKa,gBAAkBb,EAAKa,iBAvCI,SAACV,GAC/B5W,EAAYyW,EAAKzW,UAAY4W,EAE7B,EAAKjB,eAAiB4B,aAAY,WAChC,IACMC,EAAM,IAAIC,QAAJ,UAAezX,EAAf,YAA4B0X,KAAKC,OAD7B,CAACC,OAAQ,QAEzBC,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKrB,EAAKE,WACZF,EAAKC,YA6BVD,EAAKyB,eAAiBzB,EAAKyB,gBAzBI,SAACC,GAC9B,IAAMC,EAAO,IAAIC,SACjBD,EAAKE,OAAO,aAAczB,KAAK0B,UAAUJ,EAAW3C,aACpD4C,EAAKE,OAAO,QAASH,EAAWlM,OAChCmM,EAAKE,OAAO,UAAU,GAEtB,IAAME,EAAU,CAACZ,OAAQ,OAAQa,KAAML,GACjCZ,EAAM,IAAIC,QAAQU,EAAWpY,eAAgByY,GACnDX,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKK,EAAWb,kBAerBb,EAAKyB,eAAezB,SAK1BjX,EAAEmH,sBAAsBzE,KAAO,SAAC8Q,EAAOpT,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBoT,KAAKG,EAAOpT,K,eCzVjDJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEsL,iBAAiB+H,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CACzCC,QAAS,CACP8Y,QAAS,GACTC,QAAS,gBACT7F,OAAQtT,EAAE0Q,iBAAiB0I,YAG7B1Y,WAPyC,SAO9B0C,EAAShD,GAClBQ,KAAKyY,SAAWjW,EAChBxC,KAAK0Y,eAAgB,EACrB1Y,KAAK4D,MAAQpB,EAAQhD,QAAQmE,KAC7B3D,KAAK2Y,cAAe,EACpB3Y,KAAK4Y,WAAY,EAEjBxZ,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB0I,WAAWzF,OAAS,aAIzC7C,SApByC,WAqBvC,IAAM1N,EAAUxC,KAAKyY,SAErBzY,KAAKgT,YAAchT,KAAKR,QAAQyT,QAGhCzQ,EAAQqW,eACR7Y,KAAK8Y,aACL9Y,KAAK+Y,eACL/Y,KAAKgZ,4BAGDxW,EAAQ0H,eAAiB1H,EAAQhD,QAAQgW,iBAC3CxV,KAAKqC,cAGPrC,KAAKiZ,cAAczW,EAAQyF,IAAKzF,EAAQyF,GAExC7I,EAAE8B,SAASR,GAAG8B,EAAQjB,aAAc,CAClC2X,SAAUlZ,KAAKmZ,UACdnZ,MAEHZ,EAAE8B,SAASR,GAAG0Y,OAAQ,UAAWpZ,KAAKqT,WAAYrT,OAIpD8Q,YA9CyC,WA+CvC,IAAMtO,EAAUxC,KAAKyY,SACfxQ,EAAKjI,KAAKiZ,YAOhB,IAAK,IAAII,KAJTrZ,KAAKsZ,mBAEDtZ,KAAKyK,SAAWzK,KAAKsC,iBAENtC,KAAKuZ,SACtBna,EAAE6C,QAAQ8O,OAAOsI,GAOfja,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAC3CnC,EAAE6C,QAAQ8R,YAAYvR,EAAQjB,aAAc,aAG1C0G,IAAQA,EAAG9F,gBAAkB8F,EAAGzH,QAAQiK,SAC1CxC,EAAGzH,QAAQ8B,iBAGblD,EAAE8B,SAASH,IAAIyB,EAAQjB,aAAc,CACnC2X,SAAUlZ,KAAKmZ,UACdnZ,MAEHZ,EAAE8B,SAASH,IAAIqY,OAAQ,UAAWpZ,KAAKqT,WAAYrT,OAGrDc,QA9EyC,WA+EvC,OAAKd,KAAKyT,UAEVzT,KAAKyY,SAASrW,WACdpC,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MALsBA,MAQ/B8Y,WAvFyC,WA2FvC,IAAK,IAAInV,KAHT3D,KAAKwZ,OAAS,GAGGpa,EAAEsL,iBAAiB+H,KAAKgH,MAAO,CAC9C,IAAI9D,EAASvW,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,IACD,IAAtC3D,KAAKgT,YAAY0G,QAAQ/D,KAC3B3V,KAAKwZ,OAAO7V,GAAQgS,GAMnB3V,KAAKwZ,OAAOxZ,KAAK4D,SACpB5D,KAAK4D,MAAQsE,OAAOC,KAAKnI,KAAKwZ,QAAQ,KAK1CT,aA1GyC,WA2GvC,IACI/V,EADER,EAAUxC,KAAKyY,SAIrB,IADAzY,KAAK2Z,aAAeva,EAAEwa,aACjB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAK2Z,aAAaE,SAASza,EAAE0a,WAAWtX,EAASQ,IAInD,IADAhD,KAAK+Z,cAAgB3a,EAAEwa,aAClB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAK+Z,cAAcF,SAASza,EAAE4a,YAAYxX,EAASQ,IAIrD,IADAhD,KAAKia,gBAAkB7a,EAAEwa,aACpB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKia,gBAAgBJ,SAASza,EAAE8a,cAAc1X,EAASQ,IAIzD,IADAhD,KAAKma,eAAiB/a,EAAEwa,aACnB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKma,eAAeN,SAASza,EAAEgb,aAAa5X,EAASQ,IAKvD,IADAhD,KAAKqa,mBAAqBjb,EAAEwa,aACvB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKqa,mBAAmBR,SAASza,EAAEkb,iBAAiB9X,EAASQ,IAI/D,IADAhD,KAAKua,aAAenb,EAAEwa,aACjB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKua,aAAaV,SAASza,EAAEob,WAAWhY,EAASQ,EAAG,CAACyX,WAAW,KAGlEza,KAAKuZ,SAAW,CACdlY,KAAMrB,KAAK2Z,aACX9N,MAAO7L,KAAK+Z,cACZW,QAAS1a,KAAKia,gBACdU,OAAQ3a,KAAKma,eACbS,WAAY5a,KAAKqa,mBACjBQ,KAAM7a,KAAKua,eAIfvB,0BAvJyC,WAwJvC,IAAM8B,EAAK9a,KAAKyY,SAGXzY,KAAK4D,OAKV5D,KAAK+a,iBAEAD,EAAG5Q,cAAgBlK,KAAKgb,eAC3Bhb,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASpa,aAGtCd,KAAKmb,OAAO,SAAWnb,KAAKob,mBAZ/Bpb,KAAKob,mBAeT/H,WA3KyC,SA2K9BrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KACvBmH,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAEZhR,GAAMA,EAAG9F,qBAEakT,IAAtBrV,KAAK0T,IAA+BoH,EAAGtb,QAAQgW,iBAC7CsF,EAAG5Q,cAAgBlK,KAAKyK,SAC1BzK,KAAK0T,GAAaxT,KAAKF,OAK7Bqb,YA1LyC,SA0L7BC,EAAKC,GAAM,WACrB,MAAuB,yBAAnBA,EAAK1F,WAAwC7V,KAAKiU,QAAQsH,IAG9Dvb,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASuF,EAAK,CAIhB,IAAK,IAAI3X,KAHT,EAAKrB,iBACL,EAAK0Q,YAAYgD,GAAOuF,EACxB,EAAKlZ,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU2X,UACnC,EAAK9B,OAAO7V,GACnB,EAAK6X,YAAY7X,IACRvE,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU4X,IACjD,EAAK/B,OAAO7V,GAAQ4X,GAGxB,OAAO,MAfFvb,MAqBX4V,QAjNyC,SAiNjCF,GACN,GAAwB,yBAApBA,EAAMG,YAAyC7V,KAAKiU,QAAQyB,GAAQ,CAItE,IAAK,IAAI/R,KAHT3D,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU+R,IAC1C1V,KAAKwZ,OAAO7V,GAAQ+R,GAGnB1V,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBAE1C,OAAOtC,MAGTiU,QAhOyC,SAgOjCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDI,WApOyC,SAoO9BJ,GAAO,WAgBhB,OAfA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASL,EAAO,CAIlB,IAAK,IAAI/R,KAHT,EAAKrB,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU+R,WACnC,EAAK8D,OAAO7V,GACnB,EAAK6X,YAAY7X,IAGrB,OAAO,MAGN3D,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBACjCtC,MAITwb,YAxPyC,SAwP7B7X,GACN3D,KAAKmb,OAAOxX,KACVuE,OAAOC,KAAKnI,KAAKyb,YAAY5W,QAAU,EACzC7E,KAAKmZ,YAEQ,SAATxV,GAAmB3D,KAAKob,kBAC5Bpb,KAAK4D,MAAQ,GACb5D,KAAK+a,mBAKXzY,eApQyC,WAqQvC,IACIhC,EADON,KAAKyY,SACHlY,KAETP,KAAKyK,UACPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,IAInB2Q,gBA9QyC,WA8QvB,WACZ5Y,EAAUxC,KAAKyY,SACbnY,EAAMkC,EAAQjC,KAEpBP,KAAKkb,SAAW,IAAI9b,EAAEsc,UAAUlZ,EAAQjB,cACxCvB,KAAKkb,SAASza,SAGdT,KAAKkb,SAASxa,GAAG,aAAa,WAC5B8B,EAAQqG,KAAK,aACb,EAAKvG,oBAOPtC,KAAKkb,SAASS,gBAAkB,WAC9B,IAEIC,EAEA5Y,EAJEK,EAAUb,EAAQW,UAAU,GAC5BG,EAAQtD,KAAK6b,QAAQtY,SAASjD,EAAI8C,mBAAmBC,IAEvDkC,EAAU,GAKd,IAFAvF,KAAK6I,KAAK,WAEL7F,EAAI,EAAGA,EAAI,EAAGA,IACjB4Y,EAAetb,EAAI8C,mBAAmBZ,EAAQW,UAAUH,IACxDuC,EAAQvC,GAAK1C,EAAIqL,mBAAmBiQ,EAAahS,IAAItG,IAGvDd,EAAQ+I,WAAWhG,GACnB/C,EAAQqG,KAAK,QAEb7I,KAAK6I,KAAK,SAGZ7I,KAAKkb,SAASxa,GAAG,WAAW,WAC1B8B,EAAQqG,KAAK,eAIjByQ,iBAxTyC,WAyTnCtZ,KAAKkb,WACPlb,KAAKkb,SAASpa,iBACPd,KAAKkb,WAIhBY,UA/TyC,WAgUvC9b,KAAK+b,QAAQ,SAGfC,WAnUyC,WAoUvChc,KAAK+b,QAAQ,UAGfE,aAvUyC,WAwUvCjc,KAAK+b,QAAQ,YAGfG,YA3UyC,WA4UvClc,KAAK+b,QAAQ,WAGfI,gBA/UyC,WAgVvCnc,KAAK+b,QAAQ,eAGfK,gBAnVyC,WAoVnCpc,KAAKmb,OAAO,QAAWnb,KAAKmU,UACzBnU,KAAKsU,SAGd+H,eAxVyC,WAyVvC,IACI/D,EADElK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEkd,iBAEpBtc,KAAK2Y,cAAgB3Y,KAAK2Y,aAC1BL,EAAUtY,KAAK2Y,aAAe3Y,KAAKR,QAAQ8Y,QAAU,EAErDlZ,EAAE6C,QAAQgZ,WAAW7M,EAAOkK,GAC5BlK,EAAM8C,aAAa,UAAWoH,GAE9BtY,KAAKuc,aAGPC,cAvWyC,WAwWvC,IACIjE,EADEnK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEqd,gBAEpBzc,KAAK4Y,WAAa5Y,KAAK4Y,UACvBL,EAAUvY,KAAK4Y,UAAY5Y,KAAKR,QAAQ+Y,QAAU,OAElDnK,EAAMjC,MAAMoM,QAAUA,EAEtBvY,KAAKuc,aAIPG,aAtXyC,WAuXnC1c,KAAK0Y,cAAiB1Y,KAAK2c,WACxB3c,KAAK4c,cAGdC,eA3XyC,WA4XvC,IAAI/B,EAAK9a,KAAKyY,SACRxQ,EAAKjI,KAAKiZ,aAEZjZ,KAAKmb,OAAO,SAAYnb,KAAKiU,QAAQ7U,EAAEyV,eAE5BzV,EAAE6C,QAAQ6a,kBAGzB9c,KAAKsC,iBAED2F,EAAMA,EAAGgN,YAAY6F,GAClBA,EAAGva,KAAK0U,YAAY6F,KAI7BiC,WA3YyC,WA4YvC,IAAIva,EAAUxC,KAAKyY,SACfnY,EAAMkC,EAAQjC,KACdoE,EAAMnC,EAAQjB,aAElB,GAAKvB,KAAKiU,QAAQ7U,EAAE8W,cAApB,CAGA,IAAI8G,EAAe,IAAIC,MAEvBD,EAAanX,GAAKmX,EAAanX,IAAM,cACrCmM,SAASqG,KAAK5Q,YAAYuV,GAE1BA,EAAaE,OAAS,WACpB,IAAIlX,EAASgX,EAAahX,OACtBD,EAAQiX,EAAajX,MACrBoX,EAAK7c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cia,EAAK9c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cka,EAAK/c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cma,EAAKhd,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAsBlD6Z,EAAaE,OAAS,WACpB9d,EAAE6C,QAAQ8O,OAAOiM,IAGf5D,QAAUA,OAAOmE,eAAe,cAClCC,UACIR,EAAanX,GACb,CAAC,EAAG,EAAGE,EAAO,EAAGA,EAAOC,EAAQ,EAAGA,GACnC,CAACmX,EAAGlZ,EAAGkZ,EAAGjZ,EAAGkZ,EAAGnZ,EAAGmZ,EAAGlZ,EAAGoZ,EAAGrZ,EAAGqZ,EAAGpZ,EAAGmZ,EAAGpZ,EAAGoZ,EAAGnZ,IAC9C,IAKR8Y,EAAa9X,IAAM1C,EAAQhD,QAAQie,mBAAqB9Y,EAAIO,MAG9DyX,SArcyC,WAsc/B3c,KAAK0Y,eAEF1Y,KAAKiU,QAAQ7U,EAAEse,eAE1B1d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASI,eACd7Y,KAAKuc,aAGPK,WA/cyC,YAgd/B5c,KAAK0Y,eAEH1Y,KAAKiU,QAAQ7U,EAAEse,eAEzB1d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASkF,cACd3d,KAAKuc,aAGPpI,QAzdyC,WA0dvC,IAAI2G,EAAK9a,KAAKyY,SACVnY,EAAMwa,EAAGva,KACP0H,EAAKjI,KAAKiZ,YAEXjZ,KAAKmb,OAAO,YACZlT,GAAOA,EAAG1F,YAAYuY,KAAS7S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eACvB,SAApBF,EAAGtb,QAAQmE,MAAoB3D,KAAK4d,QAAQ9C,EAAGtb,QAAQmE,MAIzD3D,KAAK4D,MAAQkX,EAAGtb,QAAQmE,MAHxB3D,KAAK4D,MAAQ,GACb5D,KAAKgb,cAAgB,IAIvBhb,KAAK+a,gBACL/a,KAAKob,kBACLpb,KAAKuc,aAGPjI,MA/eyC,WAgfvC,IAAMwG,EAAK9a,KAAKyY,SACVnY,EAAMwa,EAAGva,KACT0H,EAAKjI,KAAKiZ,YAEZjZ,KAAKmb,OAAO,YACXlT,GAAOA,EAAG1F,YAAYuY,KAAS7S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eAC/Chb,KAAK4D,MAAQ,OACb5D,KAAK+a,gBACL/a,KAAKsZ,mBACLtZ,KAAKuc,aAGPsB,UAhgByC,WAigBvC7d,KAAKyY,SAASrW,YAGhBiI,aApgByC,SAogB5BrJ,GACX,IAAMiH,EAAKjI,KAAKiZ,YAEXjZ,KAAKgb,iBAELhb,KAAKmb,OAAO,SAAYlT,GAAMA,EAAG9F,gBAEtCnC,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASza,SACvCrB,EAAE6C,QAAQ4N,SAASwJ,EAAO9X,aAAc,4BAI5C4I,aAlhByC,WAmhBvC,IAAM2Q,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAGXjZ,KAAKuZ,UAAYvZ,KAAK+Y,eAEtB/Y,KAAKgb,gBACNhb,KAAKmb,OAAO,SAAYlT,GAAMA,EAAG1F,YAAYuY,IAEjD9a,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASpa,UACvC1B,EAAE6C,QAAQ8R,YAAYsF,EAAO9X,aAAc,4BAI/CwZ,cAniByC,WAoiBvC,IACIza,EADON,KAAKyY,SACHlY,KACPoD,EAAO3D,KAAK8d,UAEd9d,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eAC/Chb,KAAKgb,cAAyB,KAATrX,EAAc,GAAK3D,KAAKuZ,SAAS5V,GAC3B,KAAvB3D,KAAKgb,eACP1a,EAAIuZ,SAAS7Z,KAAKgb,gBAItB3Y,YA/iByC,WAgjBvC,IAAIyY,EAAK9a,KAAKyY,SACRxQ,EAAKjI,KAAKiZ,YACZ3Y,EAAMwa,EAAGva,KAEPgF,EAAUuV,EAAGxV,aACfyY,GAAS,IAEb,GAAI9V,GAAMA,EAAG9F,eACX8F,EAAGzH,QAAQ6B,mBAIb,IAAIyY,EAAGtb,QAAQgW,kBAAmBxV,KAAKyK,QAAvC,CAEA,IAAK,IAAIzH,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAMuY,IACnBA,EAASxY,EAAQvC,GAAGwC,KAKxB,IAAIwY,EAAclD,EAAGvR,YACrByU,EAAYxY,IAAMuY,EAElB/d,KAAKyK,QAAUrL,EAAE0Q,iBAAiBmO,SAASD,EAAa,CACtD/K,QAASjT,KAAKgT,cACbpB,MAAMtR,EAAKwa,GACdA,EAAGjS,KAAK,qBAGV0T,SA9kByC,WA+kBnCvc,KAAKyK,SAAWzK,KAAKsC,iBACzBtC,KAAKqC,eAGPuI,kBAnlByC,WAolBvC,IAAMpI,EAAUxC,KAAKyY,SAEflT,EAAU/C,EAAQ8C,aACpBmF,EAAUzK,KAAKyK,QACfsT,GAAS,IAEb,GAAItT,GAAWA,aAAmBrL,EAAEsL,iBAAiBC,SAAU,CAC7D,IAAK,IAAI3H,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAMuY,IACnBA,EAASxY,EAAQvC,GAAGwC,KAKxB,IAAIwY,EAAcxb,EAAQ+G,YAC1ByU,EAAYxY,IAAMuY,EAEbvb,EAAQhD,QAAQgW,iBACnBxV,KAAKyK,QAAQyT,UAAUF,KAK7BJ,QA3mByC,SA2mBjCja,GACN,QAAS3D,KAAKwZ,OAAO7V,IAGvBma,QA/mByC,WAgnBvC,GAAK9d,KAAKgC,UACV,OAAOhC,KAAK4D,OAGd6X,SApnByC,WAqnBvC,OAAOzb,KAAKwZ,QAGd2B,OAxnByC,SAwnBlCxX,GACL,QAAK3D,KAAKgC,WACHhC,KAAK4D,QAAUD,GAGxBoY,QA7nByC,SA6nBjCoC,GACN,IAAMrD,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAGhB,GAFWjZ,KAAK8d,YAEHK,GAAYne,KAAK4d,QAAQO,IAAane,KAAKgC,UAaxD,OATIhC,KAAKyK,SAAWzK,KAAKyK,QAAQ2T,UAAUD,GACvCne,KAAKmb,OAAO,UAAYnb,KAAKkb,UAAYlb,KAAKob,kBAClDpb,KAAK4D,MAAQua,EACTne,KAAKmb,OAAO,SAAWnb,KAAKsZ,mBAChCtZ,KAAK+a,gBACL/a,KAAKuc,WAEDtU,GAAMA,EAAG1F,YAAYuY,IAAOA,EAAG1Y,WAE5BpC,MAOTmZ,SAtpByC,SAspBhCnY,GACP,IAAI2C,EAAO3D,KAAK8d,UACV7V,EAAKjI,KAAKiZ,YACZoF,EAAanW,OAAOC,KAAKnI,KAAKyb,YAC9BzF,EAAMqI,EAAW3E,QAAQ/V,GAEzBwa,EAAUE,GADCrI,EAAM,GAAKqI,EAAWxZ,QAGrC,GAAI7D,EAAG,CACL,GAAIiH,GAAMA,EAAG9F,eAAkB,OAC/B/C,EAAE8B,SAASod,KAAKtd,GAGlB,OAAOhB,KAAK+b,QAAQoC,MAIxB/e,EAAE0Q,iBAAiBhO,KAAO,SAACU,EAAShD,GAClC,OAAO,IAAIJ,EAAEsL,iBAAiB+H,KAAKjQ,EAAShD,K,eC3qB9CJ,EAAEqd,aAAerd,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK8W,WACP4F,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAYiQ,eAEtCF,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAYkQ,YAGxCnf,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAI5CvE,EAAEsL,iBAAiB8N,WAAWuG,EAAa,SAATpb,EAAkB,GAAK,gBAEzDvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BmC,WA8BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,eAAgB,gBACnD7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpDnd,EAAK0a,oB,eClCTpd,EAAEyV,aAAezV,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIif,EAFE3c,EAAOU,EAAQhC,QAOjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCgM,EAAUjc,EAAQhD,QAAQiP,YAAYyQ,YAEtC9f,EAAEsL,iBAAiB8N,WAAW2G,UACb,SAAfrd,EAAK8B,MAAmB,GAAK,mBAG/B6a,EAAUjc,EAAQhD,QAAQiP,YAAY2Q,aACtChgB,EAAEsL,iBAAiBiI,iBAAiBwM,UACnB,SAAfrd,EAAK8B,MAAmB,GAAK,iBAIjCpE,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAtBU,iBAuBVL,QAASA,EACT5M,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAjCmC,WAkCjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAK+a,iBAC7C/a,EAAK8S,mB,eCrChBxV,EAAEigB,cAAgBjgB,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAY6Q,aACrCzN,UAAW,WAGbzS,EAAEsL,iBAAiB8N,WAAW+G,EAAI,eAClCngB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdoC,WAevBlQ,KAAKyY,SAASjY,QACpByb,mB,eChBT7c,EAAEogB,WAAapgB,EAAEmf,WAAWhf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,OACNL,QAASjc,EAAQhD,QAAQiP,YAAYgR,UACrC5N,UAAW,QAGbzS,EAAEsL,iBAAiB8N,WAAWkH,EAAI,YAClCtgB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdiC,WAelBlQ,KAAKyY,SAASjY,QACtBsb,gB,eChBT1c,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEmf,WAAanf,EAAEugB,SAASC,OAAOrgB,OAAO,CACtCC,QAAS,CACPof,YAAa,CACXC,KAAK,EACLC,KAAM,GACNjN,UAAW,GACX4M,QAAS,KAIb3e,WAVsC,SAU3BQ,EAAKkC,EAAShD,GACvBQ,KAAKyY,SAAWjW,EAChBxC,KAAKO,KAAOD,EAEZlB,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEugB,SAASC,OAAO3f,UAAUH,WAAWI,KAAKF,KAAMR,GAElDQ,KAAK+R,kBAGP8N,YApBsC,SAoB1BpV,EAASuG,EAAW8O,GAAM,WAC9BC,EAAc/f,KAAKR,QAAQof,YAC3B/M,EAAYkO,EAAYlO,UACxB/P,EAAO9B,KAAKyY,SAASjY,QAE3BR,KAAKyK,QAAUA,EACfzK,KAAKggB,MAAQ5gB,EAAE6C,QAAQgP,OAAO,KAAM,GAAID,GACxChR,KAAKif,MAAQ7f,EAAE6C,QAAQgP,OAAO,IAAK,GAAIjR,KAAKggB,OAExCD,EAAYlB,IACd7e,KAAKif,MAAM5N,UAAYjS,EAAEkS,SAASL,OAAO8O,EAAYjB,MAErD9e,KAAKif,MAAM5N,UAAY0O,EAAYjB,KAGrC9e,KAAKif,MAAM/N,aAAa,OAAQ,KAChClR,KAAKif,MAAM/N,aAAa,QAAS6O,EAAYtB,SAC7Cze,KAAKif,MAAM/N,aAAa,OAAQ,UAEhC9R,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAOjf,KAAKigB,YAAYpK,WAE5ChE,IACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAOpN,GACb,aAAdA,GACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKggB,MAAOnO,GAE7BA,IAAc/P,EAAK8B,MACrBxE,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAO,iBAE/B7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAO,kBAItC7f,EAAE8B,SAASR,GAAGV,KAAKif,MAAO,QAASjf,KAAKS,OAAQT,MAChDZ,EAAE8B,SAASR,GAAGV,KAAKyY,SAAU,UAAU,WACrC,IAAM7B,EAAQ,EAAKqI,MAAM5N,UAAUuF,MAAM,yBACrCA,GAA0B,IAAjBA,EAAM/R,QAAgB,EAAKqb,mBAI1ClgB,KAAKmgB,eAAe1V,EAASzK,KAAKggB,MAAOF,IAG3C/N,eA/DsC,WAgEpC,IAAIC,SAASC,cAAc,YAA3B,CAIA,IAAIC,EAAKF,SAASoO,cAAc,OAChClO,EAAGrM,GAAK,UACRqM,EAAGhB,aAAa,SAAU,UAC1BgB,EAAGb,WAAY,IAAIjS,EAAEihB,gBAAiBhO,SAEtCL,SAASC,cAAc,wBAAwBxK,YAAYyK,KAG7DgO,cA5EsC,WA6EpC9gB,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAMqB,cAAe,YAChDlhB,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAO,aAGpCsB,eAjFsC,WAkFpCnhB,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAMqB,cAAe,YAC7ClhB,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAO,eAInC7f,EAAEohB,WAAa,SAASlgB,EAAKkC,EAAShD,GACpC,OAAO,IAAIJ,EAAEmf,WAAWje,EAAKkC,EAAShD,K,eC7FxCJ,EAAE8W,aAAe9W,EAAEmf,WAAWhf,OAAO,CAEnCO,WAFmC,SAExBQ,EAAKkC,EAAShD,GACvB,IACIif,EADE3c,EAAOU,EAAQhC,QAGrBR,KAAKygB,aAAc,EACnBzgB,KAAK0gB,gBAAiB,EACtB1gB,KAAK2gB,iBAAkB,EAEnB7e,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAWxX,EAAI,aAClCyd,EAAUjc,EAAQhD,QAAQiP,YAAYmS,cAEtCxhB,EAAEsL,iBAAiBiI,iBAAiB3R,EAAI,cACxCyd,EAAUjc,EAAQhD,QAAQiP,YAAYoS,eAGxCrhB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASA,GAGXrf,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BmC,WA6BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3B,GAAIsB,aAAgB1C,EAAEsL,iBAAiB+H,KACrC3Q,EAAKib,kBAKP,IAAI/c,KAAK2gB,gBAAT,CAGE3gB,KAAK2gB,iBAAkB,EAGzB,IAAMG,EAAa9gB,KAAKif,MAAMqB,cAE9BtgB,KAAK+gB,kBAAoB/gB,KAAKghB,iBAAiBpe,KAAK5C,MACpDA,KAAKihB,kBAAoBjhB,KAAKkhB,iBAAiBte,KAAK5C,MAEpDZ,EAAE8B,SAASR,GAAGogB,EAAY,SAAS,WACjC,GAAK9gB,KAAKygB,YAWH,CAEL,GAAIzgB,KAAK0gB,eACP,OAGF1gB,KAAKmhB,aACLnhB,KAAKohB,0BAA0BN,GAC/Bhf,EAAKoT,oBAlBLlV,KAAKygB,aAAc,EACnBzgB,KAAKqhB,mBAELC,WAAWthB,KAAKuhB,0BAA0B3e,KAAK5C,KAAM8gB,GAAa,KAClEhf,EAAKoR,cAAcwE,KACf,WACE1X,KAAKmhB,aACLnhB,KAAKohB,0BAA0BN,IAC/Ble,KAAK5C,SAYZA,QAGLmhB,WAzEmC,WA0EjCnhB,KAAKwhB,qBACLxhB,KAAKygB,aAAc,EACnBzgB,KAAK0gB,gBAAiB,GAGxBa,0BA/EmC,SA+ETE,GACxBA,EAAQC,iBAAiB,aAAc1hB,KAAK+gB,mBAC5CU,EAAQC,iBAAiB,aAAc1hB,KAAKihB,oBAG9CG,0BApFmC,SAoFTK,GACxBA,EAAQE,oBAAoB,aAAc3hB,KAAK+gB,mBAC/CU,EAAQE,oBAAoB,aAAc3hB,KAAKihB,oBAGjDD,iBAzFmC,WA0FjChhB,KAAK4hB,oBAGPV,iBA7FmC,WA8F5BlhB,KAAK0gB,eAGR1gB,KAAK0gB,gBAAiB,EAFtB1gB,KAAKqhB,oBAMTG,mBArGmC,WAsGjCpiB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,UAAW,WAC9C7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAM4C,WAAY,WAG/CR,iBA3GmC,WA4GjCjiB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,WACnC7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAEkS,SAASwQ,cAAc9hB,KAAKif,MAAO,WAGvC2C,iBAjHmC,WAkHjCxiB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,UACnC7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAM4C,WAAY,c,cCpHjDziB,EAAE2iB,iBAAmB3iB,EAAEmf,WAAWhf,OAAO,CACvCO,WADuC,SAC5BQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,cACNL,QAASjc,EAAQhD,QAAQiP,YAAYuT,gBACrCnQ,UAAW,cAGbzS,EAAEsL,iBAAiB8N,WAAWyJ,EAAI,kBAClC7iB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAduC,WAe1BlQ,KAAKyY,SAASjY,QACpB2b,sB,eChBT/c,EAAE8iB,gBAAkB9iB,EAAEmf,WAAWhf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IAAMsC,EAAOU,EAAQhC,SAErBhB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAY0T,eACrCtQ,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAfsC,WAgBpC,IAAI9B,EAAQpO,KAAKyY,SAASlX,aAE1B6gB,KAAKC,QAAQjU,EAAOhP,EAAEgjB,KAAKhU,Q,eClB/BhP,EAAEiV,WAAajV,EAAEmf,WAAWhf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,GACvB,IACIgf,EACAC,EAFE3c,EAAOU,EAAQhC,QAIjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAW8J,EAAI,UAClCljB,EAAEsL,iBAAiB8N,WAAW+J,EAAI,QAClC9D,EAAUjc,EAAQhD,QAAQiP,YAAY+T,SAEtChE,EAAM1c,EAAKqZ,OAAO,QAAU,OAAS,WAErC/b,EAAEsL,iBAAiBiI,iBAAiB4P,EAAI,aACxC9D,EAAUjc,EAAQhD,QAAQiP,YAAYgU,WACtCjE,EAAM,SAGRhf,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAW,QAGbzS,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BiC,WA8B/B,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAKsa,kBAC7Cta,EAAKsS,iB,eCjChBhV,EAAEsjB,gBAAkBtjB,EAAEmf,WAAWhf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK6W,cACP6F,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAYkU,kBAEtCnE,EAAM,YACNC,EAAUjc,EAAQhD,QAAQiP,YAAYmU,uBAGxCpjB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAG5CnE,EAAQqjB,WAAa,IAAIzjB,EAAEugB,SAAS,CAClC1M,QAAS,CAAC6P,EAAOC,EAAQC,KAK3B5jB,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAjCsC,WAmCpC,IAAM+S,EAAOjjB,KAAKif,MAElB7f,EAAEkS,SAAS0N,YAAYiE,EAAM,YAAa,iBAC1C7jB,EAAEkS,SAASQ,YAAYmR,EAAM,yBAA0B,wBAM3D,IAAIC,EAAqB9jB,EAAEugB,SAASC,OAAOrgB,OAAO,CAChDO,WAAY,SAASQ,EAAK6iB,GACxBnjB,KAAKM,IAAMA,EACXN,KAAKmjB,SAAWA,EAChB/jB,EAAEugB,SAASC,OAAO3f,UAAUH,WAAWI,KAAKF,OAE9CkQ,SAAU,WACRlQ,KAAKmjB,SAASriB,aAIdgiB,EAAQI,EAAmB3jB,OAAO,CACpCC,QAAS,CACPof,YAAa,CACXE,KAAM,QACNL,QAAS,wBAGbvO,SAAU,WACRlQ,KAAKM,IAAI8iB,QAAQ,CAAC,EAAG,GAAI,GACzBF,EAAmBjjB,UAAUiQ,SAAShQ,KAAKF,SAG3C+iB,EAASG,EAAmB3jB,OAAO,CACrCC,QAAS,CACPof,YAAa,CACXE,KAAM,eACNL,QAAS,2BAGbvO,SAAU,WACRlQ,KAAKM,IAAI8iB,QAAQ,CAAC,SAAU,QAAU,IACtCF,EAAmBjjB,UAAUiQ,SAAShQ,KAAKF,SAG3CgjB,EAASE,EAAmB3jB,OAAO,CACrCC,QAAS,CACPof,YAAa,CACXE,KAAM,8BACNL,QAAS,c,eCnFfrf,EAAEkd,cAAgBld,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK6W,cACP6F,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAYkU,kBAEtCnE,EAAM,UACNC,EAAUjc,EAAQhD,QAAQiP,YAAYmU,uBAGxCpjB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAG5CvE,EAAEsL,iBAAiB8N,WAAW6K,EAAa,SAAT1f,EAAkB,GAAK,iBAEzDvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BoC,WA6BlC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QACrByiB,EAAOjjB,KAAKif,MAElB7f,EAAEkS,SAAS0N,YAAYiE,EAAM,UAAW,iBACxC7jB,EAAEkS,SAASQ,YAAYmR,EAAM,yBAA0B,qBACvDnhB,EAAKua,qB,eClCTjd,EAAEkkB,cAAgBlkB,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAAImE,EAAOvE,EAAEe,MAAMgT,aAAa3Q,EAAS,UAAW,SAChDqI,EAASrI,EAAQqI,QAErBrL,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAY8U,aACrC1R,UAAWhH,GAAmB,SAATlH,EAAkB,GAAK,YAG9CvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAhBoC,WAiBlC,IAAM4K,EAAK9a,KAAKyY,SAEhBrZ,EAAE8B,SAASR,GAAGoa,EAAI,CAChBhZ,KAAM9B,KAAKkgB,cACXpS,QAAS9N,KAAKugB,gBACbvgB,MAEH8a,EAAGhN,c,eCxBP1O,EAAEokB,aAAepkB,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASjc,EAAQhD,QAAQiP,YAAYgV,YACrC5R,UAAW,UAGbzS,EAAEsL,iBAAiB8N,WAAWkL,EAAI,cAClCtkB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdmC,WAepBlQ,KAAKyY,SAASjY,QACtB0b,kB,eChBT9c,EAAEukB,YAAcvkB,EAAEmf,WAAWhf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,QACNL,QAASjc,EAAQhD,QAAQiP,YAAYmV,WACrC/R,UAAW,SAGbzS,EAAEsL,iBAAiB8N,WAAWqL,EAAI,aAClCzkB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdkC,WAenBlQ,KAAKyY,SAASjY,QACtBwb,iB,eChBT5c,EAAEse,YAActe,EAAEmf,WAAWhf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,GACvB,IACIgf,EACAC,EAFE3c,EAAOU,EAAQhC,QAIjBsB,EAAK4W,eACP8F,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAYqV,eAEtCtF,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAYsV,cAGxCvkB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEsL,iBAAiB8N,WAAWlL,EAAmB,SAAfxL,EAAK8B,MAAmB,GAAK,WAC/DxE,EAAEsL,iBAAiB8N,WAAWwL,EAAmB,SAAfliB,EAAK8B,MAAmB,GAAK,aAE/DxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BkC,WA6BhC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,gBAAiB,gBACpD7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,iBAAkB,iBACrDnd,EAAK4a,mB,eCjCTtd,EAAE8U,aAAe9U,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASjc,EAAQhD,QAAQiP,YAAYwV,cAGvC7kB,EAAEsL,iBAAiBiI,iBAAiB2P,EAAI,eACxCljB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAbmC,WActBlQ,KAAKyY,SAASjY,QACpBwT,mB,eCdT5U,EAAEgjB,KAAO,SAAqBzd,GAC5B,GAAiD,IAA7CuD,OAAOC,KAAKia,KAAK8B,WAAWvf,IAAME,OAAc,CAClDmS,QAAQC,IAAImL,KAAK8B,WAAWvf,IAC5B,IAAMwf,EAAM/B,KAAK8B,WAAWvf,QAKC,IAApBwf,EAAIC,kBACiB,IAArBD,EAAIE,eAKTF,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAEhBD,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GAEfF,EAAIG,eAGJH,EAAII,iBAUqB,MAA3BJ,EAAIK,oBAK8B,MAA3BL,EAAIK,oBAHVnZ,KAAKyB,GACLqX,EAAIM,gBAAgBC,UAAYP,EAAIM,gBAAgBE,aAOvD3N,QAAQC,IAAI,yBAGdD,QAAQC,IAAI,eAAgBkN,EAAIS,cAGR,IAApBT,EAAIS,aAGuB,IAApBT,EAAIS,aAGgB,IAApBT,EAAIS,cAJHvZ,KAAKyB,QAWY,IAApBqX,EAAIU,kBACmB,IAAvBV,EAAIW,qBAKkB,IAApBX,EAAIU,kBACmB,IAAvBV,EAAIW,iBAGTX,EAAIU,YAAYH,UAAYP,EAAIU,YAAYF,YAC5CR,EAAIW,qBAMV/N,MAAM,4D,cClFV3X,EAAE2lB,cAAgB3lB,EAAE4lB,WAAWzlB,OAAO,CACpCC,QAAS,CACPylB,KAAM,UACNC,KAAM9lB,EAAE8lB,KAAK,CACXC,QAEE,iVACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZoC,WAapBtlB,KAAKulB,SAEXjb,UAAUtK,KAAKwlB,QAASxlB,KAAKylB,cAGvCC,aAlBoC,WAmBlC1lB,KAAKke,UAAUle,KAAKulB,SAASpiB,UAAUnD,KAAKwlB,aAIhDpmB,EAAE8a,cAAgB,SAAS1X,EAASwT,EAAKxW,GACvC,OAAO,IAAIJ,EAAE2lB,cAAcviB,EAASwT,EAAKxW,K,eCxB3CJ,EAAEumB,WAAavmB,EAAE4lB,WAAWzlB,OAAO,CACjCC,QAAS,CACPylB,KAAM,OACNC,KAAM9lB,EAAE8lB,KAAK,CAEXC,QAAS,ykCACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAXiC,WAY/B,IAAI9iB,EAAUxC,KAAKulB,SACbK,EAAepjB,EAAQW,UAAUnD,KAAKwlB,SACtCK,EAAY7lB,KAAKylB,YAEvBjjB,EAAQkL,OAAOkY,EAAcC,IAG/BH,aAnBiC,WAoB/B1lB,KAAKke,UAAUle,KAAKulB,SAASpiB,UAAUnD,KAAKwlB,aAIhDpmB,EAAE0a,WAAa,SAAStX,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAEumB,WAAWnjB,EAASwT,EAAKxW,K,eCzBxCJ,EAAE4lB,WAAa5lB,EAAE0mB,OAAOvmB,OAAO,CAC7BO,WAD6B,SAClB0C,EAAS+H,EAAQ/K,GAC1B,IAAMgL,EAAShI,EAAQW,UAAUoH,GAEjCnL,EAAEW,WAAWC,KAAMR,GAEnBQ,KAAKulB,SAAW/iB,EAChBxC,KAAKwlB,QAAUjb,EAEf,IAAMwb,EAAgB,CACpBtL,WAAW,EACXuL,aAAc,IAGZxmB,GAAWA,EAAQ+d,eAAe,eACpCwI,EAActL,UAAYjb,EAAQib,WAGpCrb,EAAE0mB,OAAO7lB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQub,IAGnD1lB,MArB6B,SAqBvBC,GACJlB,EAAE0mB,OAAO7lB,UAAUI,MAAMH,KAAKF,KAAMM,GACpCN,KAAKimB,iBACLjmB,KAAK0lB,gBAGP7kB,SA3B6B,SA2BpBP,GACPN,KAAKkmB,mBACL9mB,EAAE0mB,OAAO7lB,UAAUY,SAASX,KAAKF,KAAMM,IAGzC6lB,mBAhC6B,WAiC3BnmB,KAAKulB,SAAS1c,KAAK,cAGrBud,iBApC6B,WAqC3BpmB,KAAKqmB,aAGPA,UAxC6B,WAyC3BrmB,KAAKulB,SAAS1a,QAAS,EACvB7K,KAAKulB,SAAS1c,KAAK,SAGrBod,eA7C6B,WA8C3BjmB,KAAKU,GAAG,CACNgB,YAAatC,EAAE8B,SAASod,KACxBnd,UAAWnB,KAAKmmB,mBAChB9kB,KAAMrB,KAAKslB,cACXgB,QAAStmB,KAAKomB,kBACbpmB,MAEHA,KAAKulB,SAAShlB,KAAKG,GAAG,UAAWV,KAAK0lB,aAAc1lB,MACpDA,KAAKulB,SAAS7kB,GAAG,SAAUV,KAAK0lB,aAAc1lB,OAGhDkmB,iBAzD6B,WA0D3BlmB,KAAKe,IAAI,CACPW,YAAatC,EAAE8B,SAASod,KACxBnd,UAAWnB,KAAKmmB,mBAChB9kB,KAAMrB,KAAKslB,cACXgB,QAAStmB,KAAKomB,kBACbpmB,MAEHA,KAAKulB,SAAShlB,KAAKQ,IAAI,UAAWf,KAAK0lB,aAAc1lB,MACrDA,KAAKulB,SAASxkB,IAAI,SAAUf,KAAK0lB,aAAc1lB,OAIjDumB,wBAtE6B,SAsELC,EAASC,GAC/B,IAAMjkB,EAAUxC,KAAKulB,SACfjlB,EAAMkC,EAAQjC,KAEdmmB,EAAcpmB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmBojB,GACrC5Y,EAAWtN,EAAI8C,mBAAmBqjB,GAClCE,EAAsB3mB,KAAK4mB,IAAIF,EAAa/Y,GAC5CkZ,EAAmB7mB,KAAK4mB,IAAIF,EAAa9Y,GAE/C,OAAOvC,KAAKyb,KAAKD,EAAmBF,IAItCC,IApF6B,SAoFzB5C,EAAGjF,GACL,IAAMgI,EAAK/C,EAAE/f,EAAI8a,EAAE9a,EACb+iB,EAAKhD,EAAE9f,EAAI6a,EAAE7a,EAEnB,OAAOmH,KAAKC,IAAIyb,EAAI,GAAK1b,KAAKC,IAAI0b,EAAI,IAIxCC,oBA5F6B,SA4FTT,EAASC,GAC3B,IAAMjkB,EAAUxC,KAAKulB,SACfjlB,EAAMkC,EAAQjC,KAGdmmB,EAAcpmB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmBojB,GACrC5Y,EAAWtN,EAAI8C,mBAAmBqjB,GAElCS,EACJ7b,KAAK8b,MAAMT,EAAYxiB,EAAIyJ,EAAYzJ,EAAGwiB,EAAYziB,EAAI0J,EAAY1J,GAMxE,OAHEoH,KAAK8b,MAAMT,EAAYxiB,EAAI0J,EAAS1J,EAAGwiB,EAAYziB,EAAI2J,EAAS3J,GAGhDijB,M,eC5GtB9nB,EAAEgoB,iBAAmBhoB,EAAE4lB,WAAWzlB,OAAO,CACvCC,QAAS,CACPylB,KAAM,aACNC,KAAM9lB,EAAE8lB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZuC,WAarC,IAAM9iB,EAAUxC,KAAKulB,SACfjlB,EAAMkC,EAAQjC,KACdqlB,EAAepjB,EAAQW,UAAUnD,KAAKwlB,SACtCK,EAAY7lB,KAAKylB,YACjB9Y,EAAQ3M,KAAKinB,oBAAoBrB,EAAcC,GAC/Cha,EAAQ7L,KAAKumB,wBAAwBX,EAAcC,GAE3C,IAAVlZ,GAAenK,EAAQ6K,SAASV,EAAO,OAE3C,IAAIhG,EAAenE,EAAQmE,aACtBA,IAAgBA,EAAe,IAEpC,IAAM0gB,EAAU/mB,EAAIgnB,uBAAuB9kB,EAAQW,UAAU,IACvDokB,EAAUjnB,EAAIgnB,uBAAuB9kB,EAAQW,UAAU,IACvD+L,EAAI7D,KAAKmc,IAAIH,EAAQpjB,EAAIsjB,EAAQtjB,GACjCmL,EAAI/D,KAAKmc,IAAIH,EAAQnjB,EAAIqjB,EAAQrjB,GACtBmH,KAAKyb,KAAK5X,EAAIA,EAAIE,EAAIA,GACxBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAEhBrJ,EAAQoJ,QAAQ,IAIpB8Z,aArCuC,WAsCrC1lB,KAAKke,UAAUle,KAAKulB,SAASpiB,UAAUnD,KAAKwlB,aAIhDpmB,EAAEkb,iBAAmB,SAAC9X,EAASwT,EAAKxW,GAClC,OAAO,IAAIJ,EAAEgoB,iBAAiB5kB,EAASwT,EAAKxW,K,eC3C9CJ,EAAEqoB,WAAaroB,EAAE4lB,WAAWzlB,OAAO,CACjCC,QAAS,CACPylB,KAAM,OACNyC,aAAa,EACbxC,KAAM9lB,EAAE8lB,KAAK,CAEXC,QAAS,ycACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBxkB,SAZiC,SAYxBP,GACPN,KAAK2nB,gBACLvoB,EAAE4lB,WAAW/kB,UAAUY,SAASX,KAAKF,KAAMM,IAG7C2lB,eAjBiC,WAkB/B,IAAMf,EAAOllB,KAAKuB,aAElBnC,EAAE4lB,WAAW/kB,UAAUgmB,eAAe/lB,KAAKF,MAE3CZ,EAAE8B,SAASR,GAAGwkB,EAAM,CAClB1jB,UAAWxB,KAAK4nB,WAChBC,QAAS7nB,KAAK8nB,aACb9nB,MAEHZ,EAAE8B,SAASR,GAAGsR,SAAU,eAAgBhS,KAAK8nB,YAAa9nB,OAG5DkmB,iBA9BiC,WA+B/B,IAAMhB,EAAOllB,KAAKuB,aAElBnC,EAAE4lB,WAAW/kB,UAAUgmB,eAAe/lB,KAAKF,MAE3CZ,EAAE8B,SAASH,IAAImkB,EAAM,CACnB1jB,UAAWxB,KAAK4nB,WAChBC,QAAS7nB,KAAK8nB,aACb9nB,MAEHZ,EAAE8B,SAASH,IAAIiR,SAAU,eAAgBhS,KAAK8nB,YAAa9nB,OAI7DslB,cA5CiC,aA+CjCI,aA/CiC,WAgD/B1lB,KAAKke,UAAUle,KAAKulB,SAASpiB,UAAUnD,KAAKwlB,WAG9CoC,WAnDiC,SAmDtB5mB,GACT,IAAMiH,EAAKjI,KAAKulB,SAAStM,YACnBnX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAKulB,SAAS/kB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAKulB,SAASrb,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAKulB,WAA/D,CAIA,IAAMwC,EAAajmB,EAAKyY,aAExBva,KAAKgoB,OAAS1G,WAAWliB,EAAEwD,MAAK,WAC1B5C,KAAKioB,UAAYC,aAAaloB,KAAKioB,UAElCjoB,KAAKmoB,aAGRJ,EAAWlmB,WAAU,SAASwX,GACxBrZ,OAASqZ,GAAUA,EAAO+O,kBAHhCpoB,KAAKqoB,YAAY,UAAW,CAACC,WAAW,IAO1CtoB,KAAKuoB,gBACJvoB,MAAO,OAGZ8nB,YA7EiC,SA6ErB9mB,GACV,IAAMiH,EAAKjI,KAAKulB,SAAStM,YACnBnX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAKulB,SAAS/kB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAKulB,SAASrb,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAKulB,WAA/D,CAIA,IAAMwC,EAAajmB,EAAKyY,aAEpBvZ,EAAEwnB,gBAAkBxW,UACtB+V,EAAWlmB,WAAU,SAASwX,GAC5BA,EAAO+O,kBAIPpoB,KAAKgoB,QAAUE,aAAaloB,KAAKgoB,QAErChoB,KAAKioB,SAAW3G,WAAWliB,EAAEwD,MAAK,WAChC5C,KAAKooB,iBACJpoB,MAAO,SAIdZ,EAAEob,WAAa,SAAShY,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAEqoB,WAAWjlB,EAASwT,EAAKxW,K,eCvGxCJ,EAAEqpB,aAAerpB,EAAE4lB,WAAWzlB,OAAO,CACnCC,QAAS,CACPylB,KAAM,SACNC,KAAM9lB,EAAE8lB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZmC,WAajC,IAAM9iB,EAAUxC,KAAKulB,SACfK,EAAepjB,EAAQW,UAAUnD,KAAKwlB,SACtCK,EAAY7lB,KAAKylB,YACjB9Y,EAAQ3M,KAAKinB,oBAAoBrB,EAAcC,GAMrDrjB,EAAQ6K,SAASV,EAAO,QAG1B+Y,aAzBmC,WA0BjC1lB,KAAKke,UAAUle,KAAKulB,SAASpiB,UAAUnD,KAAKwlB,aAIhDpmB,EAAEgb,aAAe,SAAS5X,EAASwT,EAAKxW,GACtC,OAAO,IAAIJ,EAAEqpB,aAAajmB,EAASwT,EAAKxW,K,eC/B1CJ,EAAEspB,YAActpB,EAAE4lB,WAAWzlB,OAAO,CAClCC,QAAS,CACPylB,KAAM,QACNC,KAAM9lB,EAAE8lB,KAAK,CACXC,QAEE,iiEACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZkC,WAahC,IAAI9iB,EAAUxC,KAAKulB,SACfjlB,EAAMkC,EAAQjC,KACdoG,EAAenE,EAAQmE,aACvBif,EAAepjB,EAAQW,UAAUnD,KAAKwlB,SACtCK,EAAY7lB,KAAKylB,YACjB5Z,EAAQ7L,KAAKumB,wBAAwBX,EAAcC,GAOlDlf,IAAgBA,EAAe,IACpC,IAAM0gB,EAAU/mB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDokB,EAAUjnB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACrD+L,EAAI7D,KAAKmc,IAAIH,EAAQpjB,EAAIsjB,EAAQtjB,GACjCmL,EAAI/D,KAAKmc,IAAIH,EAAQnjB,EAAIqjB,EAAQrjB,GACpBmH,KAAKyb,KAAK5X,EAAIA,EAAIE,EAAIA,GAExBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAMhBrJ,EAAQoJ,QAAQ,IAIpB8Z,aA3CkC,WA4ChC1lB,KAAKke,UAAUle,KAAKulB,SAASpiB,UAAUnD,KAAKwlB,aAIhDpmB,EAAE4a,YAAc,SAASxX,EAASwT,EAAKxW,GACrC,OAAO,IAAIJ,EAAEspB,YAAYlmB,EAASwT,EAAKxW,K,eCjDzCJ,EAAE0Q,iBAAmB1Q,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBiI,iBAAmB,GAEtCvT,EAAEsL,iBAAiBie,WAAavpB,EAAEugB,SAASiJ,QAAQrpB,OAAO,IAE1DH,EAAE0Q,iBAAiB2F,WAAa,SAASjW,GACvC,OAAO,IAAIJ,EAAEsL,iBAAiBie,WAAWnpB,IAI3CJ,EAAEC,sBAAsBsQ,aAAY,WAElC3P,KAAK6oB,QAAU,CACbzpB,EAAE8W,aACF9W,EAAEyV,aACFzV,EAAEiV,WACFjV,EAAE8U,cAIJ9U,EAAEC,sBAAsBoT,KAAKgH,MAAQ,CACnCoB,KAAMzb,EAAEiV,WACRyU,OAAQ1pB,EAAE8U,cAGZ,IAAM8P,EAAIhkB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAK6oB,QAE7D7oB,KAAKQ,QAAUpB,EAAEmH,sBAAsBzE,KAAK9B,KAAM,CAACiT,QAAS+Q,Q,cC7B9D5kB,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEsL,iBAAiBC,SAAWvL,EAAEugB,SAASoJ,MAAMxpB,OAAO,CACpDC,QAAS,CACPwpB,OAAQ,CAAC,GAAI,KAGflpB,WALoD,SAKzC0K,EAAQhL,GACjBJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEugB,SAASoJ,MAAM9oB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQhL,IAG3D0Q,SAVoD,SAU3C5P,EAAKwa,GACZ9a,KAAKM,IAAMA,EACXN,KAAK8a,GAAKA,GAGZmO,MAfoD,WAgBlD,GAAIjpB,KAAKkpB,IACP,OAAOlpB,KAAKkpB,IAAIC,UAIpB/K,UArBoD,SAqB1CgL,GAER,IADA,IAAMH,EAAQjpB,KAAKipB,QACVjmB,EAAI,EAAGA,EAAIimB,EAAMpkB,OAAQ7B,IAAK,CACrC,IAAIqmB,EAAOJ,EAAMlT,KAAK/S,GAAGmmB,SAAS,GAClC,GAAI/pB,EAAE6C,QAAQQ,SAAS4mB,EAAMD,GAE3B,OADAC,EAAKC,QACED,EAGX,OAAO,KAIXjqB,EAAE0Q,iBAAiBmO,SAAW,SAASzT,EAAQhL,GAC7C,OAAO,IAAIJ,EAAEsL,iBAAiBC,SAASH,EAAQhL,IAGjDJ,EAAEoH,wBAAwBmJ,aAAY,WAEpC3P,KAAK6oB,QAAU,CACbzpB,EAAEogB,WACFpgB,EAAEukB,YACFvkB,EAAEigB,cACFjgB,EAAEokB,aACFpkB,EAAE2iB,iBACF3iB,EAAEiV,WACFjV,EAAEkd,cACFld,EAAEsjB,gBACFtjB,EAAEqd,aACFrd,EAAE8W,aACF9W,EAAEyV,cAIJzV,EAAEsL,iBAAiB+H,KAAKgH,MAAQ,CAC9BpY,KAAMjC,EAAEogB,WACR3T,MAAOzM,EAAEukB,YACTjJ,QAAStb,EAAEigB,cACX1E,OAAQvb,EAAEokB,aACV5I,WAAYxb,EAAE2iB,iBACdlH,KAAMzb,EAAEiV,YAGV,IAAM2P,EAAIhkB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAK6oB,QAE7D7oB,KAAKQ,QAAUpB,EAAE0Q,iBAAiBhO,KAAK9B,KAAM,CAACiT,QAAS+Q,Q,eCrEzD5kB,EAAEmqB,QAAUnqB,EAAEoqB,MAAMjqB,OAAO,CAEzBkqB,KAAM,2CAENC,SAAU,GAEVrX,OANyB,WAQvB,OADArS,KAAK2pB,WAAW3pB,KAAK0pB,UACd1pB,KAAKypB,MAGdE,WAXyB,SAWdC,GACT5pB,KAAKypB,MAAQG,M,eCdjBxqB,EAAEgT,iBAAmBhT,EAAEmqB,QAAQhqB,OAAO,CAEpCmqB,SAEI,8T,eCHNtqB,EAAEihB,eAAiBjhB,EAAEmqB,QAAQhqB,OAAO,CAClCmqB,SACE,uqT,eCHJtqB,EAAEsQ,IAAIma,aAAa,CACjBC,cAAc,EACdC,SAAS,IAOX3qB,EAAEsQ,IAAIsa,aAAe5qB,EAAEsQ,IAAIua,QAAQ1qB,OAAO,CACxCO,WADwC,SAC7BQ,GACTN,KAAKO,KAAOD,EACZN,KAAKoQ,WAAa9P,EAAI8P,WACtBpQ,KAAKkqB,MAAQ5pB,EAAI6pB,OAAOC,YACxBpqB,KAAKqqB,mBAAqB,EAC1B/pB,EAAII,GAAG,SAAUV,KAAKsqB,SAAUtqB,OAGlCkQ,SATwC,WAUtC9Q,EAAE8B,SAASR,GAAGV,KAAKoQ,WAAY,YAAapQ,KAAKuqB,aAAcvqB,OAGjE8Q,YAbwC,WActC1R,EAAE8B,SAASH,IAAIf,KAAKoQ,WAAY,YAAapQ,KAAKuqB,aAAcvqB,OAGlEwqB,MAjBwC,WAkBtC,OAAOxqB,KAAKyqB,QAGdH,SArBwC,WAsBtClrB,EAAE6C,QAAQ8O,OAAO/Q,KAAKkqB,cACflqB,KAAKkqB,OAGdQ,YA1BwC,WA2BtC1qB,KAAKqqB,mBAAqB,EAC1BrqB,KAAKyqB,QAAS,GAGhBE,yBA/BwC,WAgCN,IAA5B3qB,KAAKqqB,qBACPnC,aAAaloB,KAAKqqB,oBAClBrqB,KAAKqqB,mBAAqB,IAI9BE,aAtCwC,SAsC3BvpB,GACX,IAAKA,EAAE8B,UAAyB,IAAZ9B,EAAE4pB,OAA4B,IAAb5pB,EAAEyQ,OACrC,OAAO,EAKTzR,KAAK2qB,2BACL3qB,KAAK0qB,cAELtrB,EAAE6C,QAAQ4oB,uBACVzrB,EAAE6C,QAAQ6oB,mBAEV9qB,KAAK+qB,YAAc/qB,KAAKO,KAAKyqB,2BAA2BhqB,GAExD5B,EAAE8B,SAASR,GAAGsR,SAAU,CACtBtQ,YAAatC,EAAE8B,SAASod,KACxB2M,UAAWjrB,KAAKkrB,aAChBrD,QAAS7nB,KAAKmrB,YACbnrB,OAGLkrB,aA5DwC,SA4D3BlqB,GACNhB,KAAKyqB,SACRzqB,KAAKyqB,QAAS,EAEdzqB,KAAKorB,KAAOhsB,EAAE6C,QAAQgP,OAAO,MAAO,mBAAoBjR,KAAKoQ,YAC7DhR,EAAE6C,QAAQ4N,SAAS7P,KAAKoQ,WAAY,qBAEpCpQ,KAAKO,KAAKsI,KAAK,iBAGjB7I,KAAKqrB,OAASrrB,KAAKO,KAAKyqB,2BAA2BhqB,GAEnDhB,KAAKsrB,QAAUlsB,EAAEmsB,OAAOvrB,KAAK+qB,YAAa/qB,KAAKqrB,QAC/C,IAAIG,EAAOxrB,KAAKsrB,QAAQG,UAExBrsB,EAAE6C,QAAQypB,YAAY1rB,KAAKorB,KAAMprB,KAAKsrB,QAAQK,KAE9C3rB,KAAKorB,KAAKjf,MAAMpG,MAAQylB,EAAKvnB,EAAI,KACjCjE,KAAKorB,KAAKjf,MAAMnG,OAASwlB,EAAKtnB,EAAI,MAGpC0nB,QAjFwC,WAkFlC5rB,KAAKyqB,SACPrrB,EAAE6C,QAAQ8O,OAAO/Q,KAAKorB,MACtBhsB,EAAE6C,QAAQ8R,YAAY/T,KAAKoQ,WAAY,sBAGzChR,EAAE6C,QAAQ4pB,sBACVzsB,EAAE6C,QAAQ6pB,kBAEV1sB,EAAE8B,SAASH,IAAIiR,SAAU,CACvBtQ,YAAatC,EAAE8B,SAASod,KACxB2M,UAAWjrB,KAAKkrB,aAChBrD,QAAS7nB,KAAKmrB,YACbnrB,OAGLmrB,WAjGwC,SAiG7BnqB,GACT,IAAgB,IAAZA,EAAE4pB,OAA4B,IAAb5pB,EAAEyQ,UAIvBzR,KAAK4rB,UAEA5rB,KAAKyqB,QAAV,CAIAzqB,KAAK2qB,2BACL3qB,KAAKqqB,mBAAqB/I,WACtBliB,EAAE6N,KAAKrK,KAAK5C,KAAK0qB,YAAa1qB,MAAO,GAEzC,IAAIurB,EAASnsB,EAAE4K,aACXhK,KAAKO,KAAKwrB,uBAAuB/rB,KAAKsrB,QAAQU,iBAC9ChsB,KAAKO,KAAKwrB,uBAAuB/rB,KAAKsrB,QAAQW,gBAG9ClhB,EAAO/K,KAAKO,KAAKuJ,UACjBT,EAASrJ,KAAKO,KAAKgJ,YAGvBgiB,EAASvrB,KAAKO,KAAKmU,8BAA8B6W,EAAQxgB,EAAM1B,GAE/DrJ,KAAKO,KAAKsI,KAAK,gBAAiB,CAAC2L,iBAAkB+W,QAIvDnsB,EAAEsQ,IAAIC,YAAY,aAAc,eAAgBvQ,EAAEsQ,IAAIsa,e,eCxItD5qB,EAAEsQ,IAAIma,aAAa,CACjBjhB,mBAAmB,IAOrBxJ,EAAEsQ,IAAIwc,kBAAoB9sB,EAAEsQ,IAAIyc,gBAAgB5sB,OAAO,CACrDkB,OADqD,WAEnD,IAAIH,EAAMN,KAAKO,KAEf,OAAIP,KAAKyT,WAGLnT,EAAIqI,gBAAgB3G,WACtB1B,EAAIqI,gBAAgB7H,UAGtBd,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAVuBlQ,MAc9Bc,QAlBqD,WAmBnD,OAAKd,KAAKyT,UAEVzT,KAAKyT,UAAW,EAChBzT,KAAK8Q,cAEE9Q,MALsBA,MAQ/BosB,cA3BqD,SA2BvCprB,GACZ,IAAIV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGPD,GAAMA,EAAG9Q,WAEbxC,EAAI+rB,UAAY,EAChBrsB,KAAKO,KAAK+rB,cAAgBhL,YAAW,WACd,IAAjBhhB,EAAI+rB,UACN/rB,EAAI+rB,SAAW,EACf/rB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQklB,OAAU3Y,GAAMA,EAAG4Y,mBAAmBC,kBAClDnsB,EAAIuI,KAAK,cAGZ,OAGL6jB,eAhDqD,WAiDnD,IAAIpsB,EAAMN,KAAKO,KACXosB,EAASrsB,EAAIssB,QAEjBtL,YAAW,WACThhB,EAAI+rB,SAAW,EACfnE,aAAa5nB,EAAIgsB,iBAChB,GAEEK,IAE0B,IAA3BA,EAAOntB,QAAQ8Y,SACjBqU,EAAOntB,QAAQ8Y,QAAU,EACzBqU,EAAO1R,WAAW,KAElB0R,EAAOntB,QAAQ8Y,QAAU,EACzBqU,EAAO1R,WAAW,QAKxB7b,EAAEsQ,IAAIC,YAAY,aAAc,oBAAqBvQ,EAAEsQ,IAAIwc,oB,eCxE3D9sB,EAAEsQ,IAAIyc,gBAAgBU,QAAQ,CAC5B3c,SAD4B,WAE1BlQ,KAAKO,KAAKG,GAAG,CACX4oB,MAAOtpB,KAAKosB,cACZlT,SAAUlZ,KAAK0sB,gBACd1sB,OAGL8Q,YAR4B,WAS1B9Q,KAAKO,KAAKQ,IAAI,CACZuoB,MAAOtpB,KAAKosB,cACZlT,SAAUlZ,KAAK0sB,gBACd1sB,OAGLS,OAf4B,WAgB1B,OAAIT,KAAKyT,UAGLzT,KAAKO,KAAKqI,mBACR5I,KAAKO,KAAKqI,kBAAkB5G,YAMlChC,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAbuBlQ,MAiB9Bc,QAjC4B,WAkC1B,OAAKd,KAAKyT,UAGVzT,KAAKO,KAAKsI,KAAK,kBAEf7I,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAPsBA,MAU/BosB,cA5C4B,SA4CdprB,GACZ,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGTD,GAAMA,EAAG9Q,WAEbxC,EAAI+rB,UAAY,EAChBrsB,KAAKO,KAAK+rB,cAAgBhL,YAAW,WACd,IAAjBhhB,EAAI+rB,UACN/rB,EAAI+rB,SAAW,EACf/rB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQklB,OAAU3Y,GAAMA,EAAG4Y,mBAAmBC,kBAIlDnsB,EAAIwsB,cAAclZ,EAAI,WAAY,CAACtT,MAGtC,OAGLosB,eApE4B,SAoEb1rB,GACb,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAOb,GALAyN,YAAW,WACThhB,EAAI+rB,SAAW,EACfnE,aAAa5nB,EAAIgsB,iBAChB,IAEE1Y,EAAM,OAAO,EAElB,IAAMmZ,EAAUzsB,EAAIwJ,UACdxG,EAAQhD,EAAId,QAAQwtB,UACpBjiB,EAAO6I,EAAG9Q,SAAWiqB,EAAUzpB,EAAQypB,EAAUzpB,EAEnB,WAAhChD,EAAId,QAAQmJ,gBACdrI,EAAI2sB,QAAQliB,GAEZzK,EAAI4sB,cAAclsB,EAAEmsB,eAAgBpiB,O,eC1F1C3L,EAAEsQ,IAAImd,QAAQ,CAEZR,SAAU,EAEVe,gBAJY,SAII/W,GAiCd,OA9BAA,EAAOrW,KAAKqtB,cAAgBjuB,EAAEG,OAAO,CACnC+tB,cAAe,GACfC,QAAS,GACTC,cAAe,GACfC,QAAS,EACTd,QAAQ,EACRe,aAAc,EACd9kB,mBAAmB,GAClByN,IAEOsW,SACR3sB,KAAKqtB,cAAgBjuB,EAAEG,OAAOS,KAAKqtB,cAAe,CAChDK,aAAcrX,EAAKsW,OAAS,OAAItX,EAChCzM,oBAAmByN,EAAKsW,aAAgBtX,KAI5CrV,KAAK2tB,cAAgBvuB,EAAEwuB,UAnBX,oDAmB0B,CACpCL,QAASlX,EAAKkX,QACdC,cAAenX,EAAKmX,cACpBC,QAASpX,EAAKoX,QACdnV,QAASjC,EAAKiX,gBACb1b,MAAM5R,MAELqW,EAAKsW,OAAU3sB,KAAK6tB,WAAWxX,GAGjCrW,KAAK4I,uBAAoByM,EAGpBrV,MAGT6tB,WAxCY,SAwCDxX,GAsBT,OAnB0B,IAAtBA,EAAKqX,cAA4C,IAAtBrX,EAAKqX,eAClCrX,EAAKqX,aAAe,GAGtB1tB,KAAK4sB,QAAUxtB,EAAEwuB,UANL,8EAMoB,CAC9BE,YAAa,0OACbC,WAAY,OACZrG,aAAa,EACbpP,QAASjC,EAAKqX,aACdH,QAASlX,EAAKkX,QACdC,cAAenX,EAAKmX,cACpBC,QAASpX,EAAKoX,QACdO,IAAK,QACJpc,MAAM5R,MAELA,KAAKqtB,cAAczkB,mBACrB5I,KAAK4I,kBAAkBnI,SAGlBT,QAKXZ,EAAEsQ,IAAIC,aAAY,WAChB3P,KAAK4I,kBAAkB9H,UACvBd,KAAK2I,gBAAgBlI,a,eCtEvBrB,EAAE6C,QAAU7C,EAAEG,OAAOH,EAAE6C,QAAS,CAC9B7B,gBAD8B,SACd6tB,GACdjuB,KAAKyO,YAAcwf,GAGrBzf,gBAL8B,SAKd0f,GACd,IAAMjgB,EAAO7O,EAAEiI,QAAQ6G,UAAY9O,EAAEiI,QAAQ8mB,SAAW/uB,EAAEiI,QAAQ+mB,KAS5DliB,EAAS,CACbgiB,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjBA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjB,EAAG,EAAG,EAAG,EACTA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,IAGbG,EAAMpgB,EAAO,YAAc/B,EAAOyC,KAAK,KAAO,IAAM,GAQ1D,OANKV,GACH+I,QACKC,IAAI,uFAIJoX,GAGTnsB,YAjC8B,SAiClBgQ,EAAIL,GACd,IAAM3O,EAAI2O,EACV,OAAO7R,KAAKyC,SAASyP,EAAIhP,GACvBlD,KAAK+T,YAAY7B,EAAIhP,GAAKlD,KAAK6P,SAASqC,EAAIhP,IAGhD4Z,cAvC8B,WAwC5B,OAAO1D,OAAOkV,QAAQtuB,KAAKyO,YAAY8f,qBAGzCvZ,eA3C8B,SA2CfD,GACb,GAAU,IAANA,EAAW,OAAO/U,KAAK8c,gBAE3B,IACI0R,EADE/f,EAAczO,KAAKyO,YAAYggB,qBASrC,OALED,EADyB,mBAAhB/f,EACIA,EAAYsG,GAEZtG,EAGR2K,OAAOkV,QAAQE,O,cCvD1BpvB,EAAEkS,SAAW,CAMXL,OANW,SAMJyd,GAKL,MAJI,KAAKC,KAAKD,KACZA,EAAMA,EAAIE,QAAQ,KAAM,KAIxB,4BAA8BF,EAA9B,mDACuBA,EADvB,kBAMJ5M,cAlBW,SAkBG9Q,EAAW6d,GACvB,IAAMhQ,EAAM7N,EAAUiB,cAAc,OAEhC4M,GACFzf,EAAE6C,QAAQ4N,SAASgP,EAAKgQ,IAK5B7P,YA3BW,SA2BChO,EAAW8d,EAAMC,GACtB,KAAKJ,KAAKG,KACbA,EAAO,IAAMA,GAEV,KAAKH,KAAKI,KACbA,EAAO,IAAMA,GAGf,IAAMvQ,EAAMxN,EAAUiB,cAAc,OACpC,GAAIuM,EAAK,CACP,IAAMwQ,EAAUxQ,EAAIyQ,aAAa,gBAAkBH,EAAOC,EAAOD,EAEjE,OADAtQ,EAAItN,aAAa,aAAc8d,GACxBA,EAET,OAAO,GAGTld,YA5CW,SA4CCd,EAAWke,EAAQC,GAC7B,IAAMH,EAAUhe,EAAUie,aAAa,WAAaC,EAASC,EAASD,EAMtE,OAJAle,EAAUE,aAAa,QAAS8d,GAC5Bhe,EAAUoe,aAAa,eACzBpe,EAAUE,aAAa,aAAc8d,GAEhCA,K,eCnDX5vB,EAAE+G,UAAY,CAEZC,cAFY,SAEE5D,GACZ,IAAIlC,EAAMkC,EAAQjC,KAMlB,OAAe,IAJJD,EACN8C,mBAAmBZ,EAAQW,UAAU,IACrCksB,WAAW/uB,EAAI8C,mBAAmBZ,EAAQW,UAAU,KAEnCX,EAAQjB,aAAawE,S,eCT/C3G,EAAEmQ,WAAa,CAGb+f,IAHa,SAGTpB,GACF,MAAO,CACLA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAK/DqB,OAZa,SAYNvL,EAAGjF,GACR,IACI/b,EADEE,EAAI,GAGV,IAAKF,EAAI,EAAGA,EAAI,EAAGA,IACjB,IAAK,IAAIiM,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAG1B,IAFA,IAAIugB,EAAM,EAED/jB,EAAI,EAAGA,EAAI,EAAGA,IACrB+jB,GAAOxL,EAAE,EAAEhhB,EAAIyI,GAAGsT,EAAE,EAAEtT,EAAIwD,GAG5B/L,EAAE,EAAEF,EAAIiM,GAAKugB,EAIjB,OAAOtsB,GAITusB,OAhCa,SAgCNvB,EAAGwB,GACR,MAAO,CACLxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAC/BxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAC/BxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,KAKnCC,OAzCa,SAyCN9L,EAAGqK,GAGR,IAFA,IAAMhiB,EAAS,GAENlJ,EAAI,EAAGuf,EAAI2L,EAAErpB,OAAQ7B,EAAIuf,EAAGvf,IACnCkJ,EAAOtG,KAAKie,EAAEqK,EAAElrB,IAGlB,OAAOkJ,GAGT0jB,cAnDa,SAmDCC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACxC,IAAMlC,EAAI,CACR2B,EAAIE,EAAIE,EACRH,EAAIE,EAAIE,EACR,EAAG,EAAG,GAEJR,EAAItwB,EAAEmQ,WAAWkgB,OAAOrwB,EAAEmQ,WAAW+f,IAAIpB,GAAI,CAACiC,EAAIC,EAAI,IAE1D,OAAOhxB,EAAEmQ,WAAWggB,OAAOrB,EAAG,CAC5BwB,EAAE,GAAI,EAAG,EACT,EAAGA,EAAE,GAAI,EACT,EAAG,EAAGA,EAAE,MAIZpmB,QAlEa,SAkEL4kB,EAAGjqB,EAAGC,GACZ,IAAIwrB,EAAItwB,EAAEmQ,WAAWkgB,OAAOvB,EAAG,CAACjqB,EAAGC,EAAG,IAEtC,MAAO,CAACwrB,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,KAG5BlgB,oBAxEa,SAyET6gB,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,GAEjB,IAAIvN,EAAIzkB,EAAEmQ,WAAWqgB,cAAcS,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClE3R,EAAIngB,EAAEmQ,WAAWqgB,cAAcW,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClElD,EAAI9uB,EAAEmQ,WAAWggB,OAAOhQ,EAAGngB,EAAEmQ,WAAW+f,IAAIzL,IAKhD,OAAOzkB,EAAEmQ,WAAWogB,OAAO,EAAEzB,EAAE,GAAIA,M,eCrFvC9uB,EAAEwN,SAAW,CAEXC,UAFW,SAED5I,EAAGC,GAAiB,IAAd+H,EAAc,uDAAP,MACrB,MAAgB,QAATA,EACHjM,KAAKgN,iBAAiB3B,KAAK8b,MAAMjjB,EAAGD,IACpCoH,KAAK8b,MAAMjjB,EAAGD,IAGpB+I,iBARW,SAQML,GACf,OAAgB,IAARA,EAAetB,KAAKyB,IAG9BS,iBAZW,SAYMZ,GACf,OAAQA,EAAQtB,KAAKyB,GAAM,O,eCb/B1N,EAAEe,MAAQ,CACRC,gBADQ,WAEN,IAAMqO,EAAc,CAClByQ,YAAa,eACbE,aAAc,gBACdE,aAAc,gBACdG,UAAW,aACXmB,YAAa,eACbC,aAAc,gBACdnC,aAAc,gBACdC,UAAW,aACXqD,gBAAiB,oBACjBG,eAAgB,kBAChBK,SAAU,YACVC,WAAY,cACZE,gBAAiB,oBACjBC,qBAAsB,yBACtBW,aAAc,wBACdE,YAAa,eACbG,WAAY,cACZE,aAAc,iBACdC,YAAa,gBACbE,aAAc,gBACdsK,mBACE,qEACFE,qBACE,wEAGJ,GAAKzuB,KAAKR,QAAQiP,YAIhB,IAAK,IAAMkF,KAAOlF,EACXzO,KAAKR,QAAQiP,YAAY8O,eAAe5J,KAC3C3T,KAAKR,QAAQiP,YAAYkF,GAAOlF,EAAYkF,SALhD3T,KAAKR,QAAQiP,YAAcA,EAU7BrP,EAAE6C,QAAQ7B,gBAAgBJ,KAAKR,QAAQiP,cAGzC0E,aA3CQ,SA2CK8a,EAAKta,EAAK0d,GAErB,MADY,CAAC1d,EAAK0d,GACP5sB,QAAO,SAASwpB,EAAKxiB,GAC9B,OAAOwiB,GAAOA,EAAIxiB,KACjBwiB,OC7CPqD,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,O","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [World, Eiffel, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar ImmediateSubAction = L.Toolbar2.Action.extend({\n initialize: function(map, myAction) {\n this.map = map;\n this.myAction = myAction;\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks: function() {\n this.myAction.disable();\n },\n});\n\nvar World = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: 'World',\n tooltip: 'See the whole world',\n },\n },\n addHooks: function() {\n this.map.setView([0, 0], 0);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\nvar Eiffel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: 'Eiffel Tower',\n tooltip: 'Go to the Eiffel Tower',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\nvar Cancel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","World","Eiffel","Cancel","link","ImmediateSubAction","myAction","setView","o","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 5a570e814..7216893f2 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -25,18 +25,19 @@ L.OpacitiesAction = L.EditAction.extend({ actions: [World, Eiffel, Cancel], }); - L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; + // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; + L.setOptions(this, options); L.EditAction.prototype.initialize.call(this, map, overlay, options); }, addHooks() { - const edit = this._overlay.editing; + // const edit = this._overlay.editing; const link = this._link; L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty'); L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); - edit._toggleOpacity(); + // edit._toggleOpacity(); }, }); From 9fd5c2eb54063b4fc9781e9c5548ab72681b6a29 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 05:49:09 +0200 Subject: [PATCH 13/73] sub-menu test 2 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index ab420616f..d821c0d92 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,n,a){var s,r,l=n.editing,c=l._mode;l._transparent?(s="opacity_empty",r=n.options.translation.makeImageOpaque):(s="opacities",r=n.options.translation.makeImageTransparent),(a=a||{}).toolbarIcon={svg:!0,html:s,tooltip:r,className:"lock"===c?"disabled":""},a.subToolbar=new L.Toolbar2({actions:[e,i,o]}),L.setOptions(this,a),L.EditAction.prototype.initialize.call(this,t,n,a)},addHooks:function(){var t=this._link;L.IconUtil.toggleXlink(t,"opacities","opacity_empty"),L.IconUtil.toggleTitle(t,"Make Image Transparent","Make Image Opaque")}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){this.map=t,this.myAction=e,L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:"World",tooltip:"See the whole world"}},addHooks:function(){this.map.setView([0,0],0),t.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:"Eiffel Tower",tooltip:"Go to the Eiffel Tower"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),t.prototype.addHooks.call(this)}}),o=t.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,n,a){var s,r,l=n.editing,c=l._mode;l._transparent?(s="opacity_empty",r=n.options.translation.makeImageOpaque):(s="opacities",r=n.options.translation.makeImageTransparent),(a=a||{}).toolbarIcon={svg:!0,html:s,tooltip:r,className:"lock"===c?"disabled":""},a.subToolbar=new L.Toolbar2({actions:[e,i,o]}),L.setOptions(this,a),L.EditAction.prototype.initialize.call(this,t,n,a)},addHooks:function(){}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){this.map=t,this.myAction=e,L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:"World",tooltip:"See the whole world"}},addHooks:function(){this.map.setView([0,0],0),t.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:"Eiffel Tower",tooltip:"Go to the Eiffel Tower"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),t.prototype.addHooks.call(this)}}),o=t.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 2f4102f56..34a750412 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [World, Eiffel, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar ImmediateSubAction = L.Toolbar2.Action.extend({\n initialize: function(map, myAction) {\n this.map = map;\n this.myAction = myAction;\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks: function() {\n this.myAction.disable();\n },\n});\n\nvar World = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: 'World',\n tooltip: 'See the whole world',\n },\n },\n addHooks: function() {\n this.map.setView([0, 0], 0);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\nvar Eiffel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: 'Eiffel Tower',\n tooltip: 'Go to the Eiffel Tower',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\nvar Cancel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","World","Eiffel","Cancel","link","ImmediateSubAction","myAction","setView","o","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [World, Eiffel, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar ImmediateSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n this.map = map;\n this.myAction = myAction;\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar World = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: 'World',\n tooltip: 'See the whole world',\n },\n },\n addHooks: function() {\n this.map.setView([0, 0], 0);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\nvar Eiffel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: 'Eiffel Tower',\n tooltip: 'Go to the Eiffel Tower',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\nvar Cancel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","World","Eiffel","Cancel","ImmediateSubAction","myAction","setView","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 7216893f2..6b7a8b5b1 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -33,22 +33,22 @@ L.OpacitiesAction = L.EditAction.extend({ addHooks() { // const edit = this._overlay.editing; - const link = this._link; + // const link = this._link; - L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty'); - L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); + // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty'); + // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); // edit._toggleOpacity(); }, }); var ImmediateSubAction = L.Toolbar2.Action.extend({ - initialize: function(map, myAction) { + initialize(map, myAction) { this.map = map; this.myAction = myAction; L.Toolbar2.Action.prototype.initialize.call(this); }, - addHooks: function() { + addHooks() { this.myAction.disable(); }, }); From 14e57478ac68a74e01012379379731125cf60bce Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 06:21:27 +0200 Subject: [PATCH 14/73] sub-menu test 3 --- dist/leaflet.distortableimage.css | 5 +++++ src/edit/actions/OpacitiesAction.js | 10 +++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 7da145f21..74fb98ffc 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -221,6 +221,11 @@ a.leaflet-toolbar-icon[title='Loading...'] { fill: #c10d0d; } +.leaflet-toolbar-icon-vertical { + background-color: rgba(0, 0, 0, 1); + border: inset 0.5px lightgray; +} + input[type="text"]::-webkit-input-placeholder { color: #979797; } diff --git a/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 6b7a8b5b1..050824614 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -44,8 +44,9 @@ L.OpacitiesAction = L.EditAction.extend({ var ImmediateSubAction = L.Toolbar2.Action.extend({ initialize(map, myAction) { - this.map = map; - this.myAction = myAction; + map = map; + myAction = myAction; + L.Toolbar2.Action.prototype.initialize.call(this); }, addHooks() { @@ -58,6 +59,7 @@ var World = ImmediateSubAction.extend({ toolbarIcon: { html: 'World', tooltip: 'See the whole world', + className: 'leaflet-toolbar-icon-vertical', }, }, addHooks: function() { @@ -68,7 +70,7 @@ var World = ImmediateSubAction.extend({ var Eiffel = ImmediateSubAction.extend({ options: { toolbarIcon: { - html: 'Eiffel Tower', + html: '', tooltip: 'Go to the Eiffel Tower', }, }, @@ -77,6 +79,7 @@ var Eiffel = ImmediateSubAction.extend({ ImmediateSubAction.prototype.addHooks.call(this); }, }); +/* var Cancel = ImmediateSubAction.extend({ options: { toolbarIcon: { @@ -85,3 +88,4 @@ var Cancel = ImmediateSubAction.extend({ }, }, }); +*/ From 02f164fed883d70ff43bee432159dad69ade8a8b Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 06:25:21 +0200 Subject: [PATCH 15/73] sub-menu test 4 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index d821c0d92..77f08a14e 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,n,a){var s,r,l=n.editing,c=l._mode;l._transparent?(s="opacity_empty",r=n.options.translation.makeImageOpaque):(s="opacities",r=n.options.translation.makeImageTransparent),(a=a||{}).toolbarIcon={svg:!0,html:s,tooltip:r,className:"lock"===c?"disabled":""},a.subToolbar=new L.Toolbar2({actions:[e,i,o]}),L.setOptions(this,a),L.EditAction.prototype.initialize.call(this,t,n,a)},addHooks:function(){}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){this.map=t,this.myAction=e,L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:"World",tooltip:"See the whole world"}},addHooks:function(){this.map.setView([0,0],0),t.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:"Eiffel Tower",tooltip:"Go to the Eiffel Tower"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),t.prototype.addHooks.call(this)}}),o=t.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,o,n){var a,s,r=o.editing,l=r._mode;r._transparent?(a="opacity_empty",s=o.options.translation.makeImageOpaque):(a="opacities",s=o.options.translation.makeImageTransparent),(n=n||{}).toolbarIcon={svg:!0,html:a,tooltip:s,className:"lock"===l?"disabled":""},n.subToolbar=new L.Toolbar2({actions:[e,i]}),L.setOptions(this,n),L.EditAction.prototype.initialize.call(this,t,o,n)},addHooks:function(){}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:"World",tooltip:"See the whole world",className:"leaflet-toolbar-icon-vertical"}},addHooks:function(){this.map.setView([0,0],0),t.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:'',tooltip:"Go to the Eiffel Tower",className:"leaflet-toolbar-icon-vertical"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),t.prototype.addHooks.call(this)}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 34a750412..72d6e44af 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [World, Eiffel, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar ImmediateSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n this.map = map;\n this.myAction = myAction;\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar World = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: 'World',\n tooltip: 'See the whole world',\n },\n },\n addHooks: function() {\n this.map.setView([0, 0], 0);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\nvar Eiffel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: 'Eiffel Tower',\n tooltip: 'Go to the Eiffel Tower',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\nvar Cancel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","World","Eiffel","Cancel","ImmediateSubAction","myAction","setView","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [World, Eiffel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar ImmediateSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar World = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: 'World',\n tooltip: 'See the whole world',\n className: 'leaflet-toolbar-icon-vertical',\n },\n },\n addHooks: function() {\n this.map.setView([0, 0], 0);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\nvar Eiffel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Go to the Eiffel Tower',\n className: 'leaflet-toolbar-icon-vertical',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\n/*\nvar Cancel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","World","Eiffel","ImmediateSubAction","myAction","setView","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 050824614..464adb674 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -22,7 +22,7 @@ L.OpacitiesAction = L.EditAction.extend({ }; options.subToolbar = new L.Toolbar2({ - actions: [World, Eiffel, Cancel], + actions: [World, Eiffel], }); // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; @@ -72,6 +72,7 @@ var Eiffel = ImmediateSubAction.extend({ toolbarIcon: { html: '', tooltip: 'Go to the Eiffel Tower', + className: 'leaflet-toolbar-icon-vertical', }, }, addHooks: function() { From 5e5754063670b08e80697378b2763d4e584cef41 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 06:36:13 +0200 Subject: [PATCH 16/73] sub-menu test 5 --- dist/leaflet.distortableimage.css | 8 ++++++++ dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 22 ++++------------------ 4 files changed, 14 insertions(+), 20 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 74fb98ffc..7f28c79d1 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -226,6 +226,14 @@ a.leaflet-toolbar-icon[title='Loading...'] { border: inset 0.5px lightgray; } +.leaflet-toolbar-icon-range { + writing-mode: bt-lr; + -webkit-appearance: slider-vertical; + appearance: slider-vertical; + width: auto; + height: 100px; +} + input[type="text"]::-webkit-input-placeholder { color: #979797; } diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 77f08a14e..93ad820b1 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,o,n){var a,s,r=o.editing,l=r._mode;r._transparent?(a="opacity_empty",s=o.options.translation.makeImageOpaque):(a="opacities",s=o.options.translation.makeImageTransparent),(n=n||{}).toolbarIcon={svg:!0,html:a,tooltip:s,className:"lock"===l?"disabled":""},n.subToolbar=new L.Toolbar2({actions:[e,i]}),L.setOptions(this,n),L.EditAction.prototype.initialize.call(this,t,o,n)},addHooks:function(){}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:"World",tooltip:"See the whole world",className:"leaflet-toolbar-icon-vertical"}},addHooks:function(){this.map.setView([0,0],0),t.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:'',tooltip:"Go to the Eiffel Tower",className:"leaflet-toolbar-icon-vertical"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),t.prototype.addHooks.call(this)}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,o,n){var a,s,r=o.editing,l=r._mode;r._transparent?(a="opacity_empty",s=o.options.translation.makeImageOpaque):(a="opacities",s=o.options.translation.makeImageTransparent),(n=n||{}).toolbarIcon={svg:!0,html:a,tooltip:s,className:"lock"===l?"disabled":""},n.subToolbar=new L.Toolbar2({actions:[e,i]}),L.setOptions(this,n),L.EditAction.prototype.initialize.call(this,t,o,n)},addHooks:function(){}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:'',tooltip:"Go to the Eiffel Tower",className:"leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),t.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 72d6e44af..3d7629398 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [World, Eiffel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar ImmediateSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar World = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: 'World',\n tooltip: 'See the whole world',\n className: 'leaflet-toolbar-icon-vertical',\n },\n },\n addHooks: function() {\n this.map.setView([0, 0], 0);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\nvar Eiffel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Go to the Eiffel Tower',\n className: 'leaflet-toolbar-icon-vertical',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\n/*\nvar Cancel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","World","Eiffel","ImmediateSubAction","myAction","setView","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar ImmediateSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Go to the Eiffel Tower',\n className: 'leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar","Cancel","ImmediateSubAction","myAction","setView","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 464adb674..7b8bca620 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -22,7 +22,7 @@ L.OpacitiesAction = L.EditAction.extend({ }; options.subToolbar = new L.Toolbar2({ - actions: [World, Eiffel], + actions: [OpacitiesBar, Cancel], }); // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; @@ -54,25 +54,12 @@ var ImmediateSubAction = L.Toolbar2.Action.extend({ }, }); -var World = ImmediateSubAction.extend({ - options: { - toolbarIcon: { - html: 'World', - tooltip: 'See the whole world', - className: 'leaflet-toolbar-icon-vertical', - }, - }, - addHooks: function() { - this.map.setView([0, 0], 0); - ImmediateSubAction.prototype.addHooks.call(this); - }, -}); -var Eiffel = ImmediateSubAction.extend({ +var OpacitiesBar = ImmediateSubAction.extend({ options: { toolbarIcon: { html: '', tooltip: 'Go to the Eiffel Tower', - className: 'leaflet-toolbar-icon-vertical', + className: 'leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range', }, }, addHooks: function() { @@ -80,7 +67,7 @@ var Eiffel = ImmediateSubAction.extend({ ImmediateSubAction.prototype.addHooks.call(this); }, }); -/* + var Cancel = ImmediateSubAction.extend({ options: { toolbarIcon: { @@ -89,4 +76,3 @@ var Cancel = ImmediateSubAction.extend({ }, }, }); -*/ From 4753ffb84e643fec7345a37088eda0ddf41bdd4c Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 06:48:13 +0200 Subject: [PATCH 17/73] sub-menu test 6 --- dist/leaflet.distortableimage.css | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 7f28c79d1..1035f6eb9 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -226,12 +226,17 @@ a.leaflet-toolbar-icon[title='Loading...'] { border: inset 0.5px lightgray; } +.leaflet-toolbar-1 { + border-radius: 0px 4px !important; +} .leaflet-toolbar-icon-range { writing-mode: bt-lr; -webkit-appearance: slider-vertical; appearance: slider-vertical; width: auto; - height: 100px; + height: 100px !important; + float: none !important; + margin: auto !important; } input[type="text"]::-webkit-input-placeholder { From a3264f68ff2c34766b23a77d0aceeee054296acc Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 07:06:37 +0200 Subject: [PATCH 18/73] sub-menu test 7 --- dist/leaflet.distortableimage.css | 10 +++++----- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 1035f6eb9..4ccfd839c 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -227,14 +227,14 @@ a.leaflet-toolbar-icon[title='Loading...'] { } .leaflet-toolbar-1 { - border-radius: 0px 4px !important; + border-radius: 0px 0px 4px 4px !important; } .leaflet-toolbar-icon-range { - writing-mode: bt-lr; - -webkit-appearance: slider-vertical; - appearance: slider-vertical; + writing-mode: bt-lr !important; + appearance: slider-vertical !important; + -webkit-appearance: slider-vertical !important; width: auto; - height: 100px !important; + height: 120px !important; float: none !important; margin: auto !important; } diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 93ad820b1..ec7d09b82 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,o,n){var a,s,r=o.editing,l=r._mode;r._transparent?(a="opacity_empty",s=o.options.translation.makeImageOpaque):(a="opacities",s=o.options.translation.makeImageTransparent),(n=n||{}).toolbarIcon={svg:!0,html:a,tooltip:s,className:"lock"===l?"disabled":""},n.subToolbar=new L.Toolbar2({actions:[e,i]}),L.setOptions(this,n),L.EditAction.prototype.initialize.call(this,t,o,n)},addHooks:function(){}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:'',tooltip:"Go to the Eiffel Tower",className:"leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),t.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,o,n){var a,s,r=o.editing,l=r._mode;r._transparent?(a="opacity_empty",s=o.options.translation.makeImageOpaque):(a="opacities",s=o.options.translation.makeImageTransparent),(n=n||{}).toolbarIcon={svg:!0,html:a,tooltip:s,className:"lock"===l?"disabled":""},n.subToolbar=new L.Toolbar2({actions:[e,i]}),L.setOptions(this,n),L.EditAction.prototype.initialize.call(this,t,o,n)},addHooks:function(){}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:'',tooltip:"Go to the Eiffel Tower",className:"leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),t.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 3d7629398..4cb5c46d0 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar ImmediateSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Go to the Eiffel Tower',\n className: 'leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar","Cancel","ImmediateSubAction","myAction","setView","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar ImmediateSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Go to the Eiffel Tower',\n className: 'leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar","Cancel","ImmediateSubAction","myAction","setView","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 7b8bca620..a1c17ceda 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -57,7 +57,7 @@ var ImmediateSubAction = L.Toolbar2.Action.extend({ var OpacitiesBar = ImmediateSubAction.extend({ options: { toolbarIcon: { - html: '', + html: '', tooltip: 'Go to the Eiffel Tower', className: 'leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range', }, From a6d0fe762fed0319602495c593fb65509121b5e1 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 07:17:28 +0200 Subject: [PATCH 19/73] sub-menu test 8 --- dist/leaflet.distortableimage.css | 1 + dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 8 ++++---- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 4ccfd839c..bfa5b0394 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -230,6 +230,7 @@ a.leaflet-toolbar-icon[title='Loading...'] { border-radius: 0px 0px 4px 4px !important; } .leaflet-toolbar-icon-range { + display: inline-block !important; writing-mode: bt-lr !important; appearance: slider-vertical !important; -webkit-appearance: slider-vertical !important; diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index ec7d09b82..d1991642e 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,o,n){var a,s,r=o.editing,l=r._mode;r._transparent?(a="opacity_empty",s=o.options.translation.makeImageOpaque):(a="opacities",s=o.options.translation.makeImageTransparent),(n=n||{}).toolbarIcon={svg:!0,html:a,tooltip:s,className:"lock"===l?"disabled":""},n.subToolbar=new L.Toolbar2({actions:[e,i]}),L.setOptions(this,n),L.EditAction.prototype.initialize.call(this,t,o,n)},addHooks:function(){}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:'',tooltip:"Go to the Eiffel Tower",className:"leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),t.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,o,n){var a,s,r=o.editing,l=r._mode;r._transparent?(a="opacity_empty",s=o.options.translation.makeImageOpaque):(a="opacities",s=o.options.translation.makeImageTransparent),(n=n||{}).toolbarIcon={svg:!0,html:a,tooltip:s,className:"lock"===l?"disabled":""},n.subToolbar=new L.Toolbar2({actions:[e,i]}),L.setOptions(this,n),L.EditAction.prototype.initialize.call(this,t,o,n)},addHooks:function(){}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:'
    ',tooltip:"Go to the Eiffel Tower",className:"leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),ImmediateSubAction.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 4cb5c46d0..1f80d7754 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar ImmediateSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Go to the Eiffel Tower',\n className: 'leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = ImmediateSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar","Cancel","ImmediateSubAction","myAction","setView","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '
    ',\n tooltip: 'Go to the Eiffel Tower',\n className: 'leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar","Cancel","OpacitiesSubAction","myAction","setView","ImmediateSubAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index a1c17ceda..211269c0b 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -42,7 +42,7 @@ L.OpacitiesAction = L.EditAction.extend({ }); -var ImmediateSubAction = L.Toolbar2.Action.extend({ +var OpacitiesSubAction = L.Toolbar2.Action.extend({ initialize(map, myAction) { map = map; myAction = myAction; @@ -54,10 +54,10 @@ var ImmediateSubAction = L.Toolbar2.Action.extend({ }, }); -var OpacitiesBar = ImmediateSubAction.extend({ +var OpacitiesBar = OpacitiesSubAction.extend({ options: { toolbarIcon: { - html: '', + html: '
    ', tooltip: 'Go to the Eiffel Tower', className: 'leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range', }, @@ -68,7 +68,7 @@ var OpacitiesBar = ImmediateSubAction.extend({ }, }); -var Cancel = ImmediateSubAction.extend({ +var Cancel = OpacitiesSubAction.extend({ options: { toolbarIcon: { html: '', From fea2b401dc36a9f7c0961793bf19129c0f94f6cc Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 07:23:19 +0200 Subject: [PATCH 20/73] sub-menu test 9 --- dist/leaflet.distortableimage.css | 5 +++-- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index bfa5b0394..fe444ae81 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -231,9 +231,10 @@ a.leaflet-toolbar-icon[title='Loading...'] { } .leaflet-toolbar-icon-range { display: inline-block !important; - writing-mode: bt-lr !important; + /*writing-mode: bt-lr !important; appearance: slider-vertical !important; - -webkit-appearance: slider-vertical !important; + -webkit-appearance: slider-vertical !important;*/ + transform: rotate(90deg); width: auto; height: 120px !important; float: none !important; diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index d1991642e..e6c2def24 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,o,n){var a,s,r=o.editing,l=r._mode;r._transparent?(a="opacity_empty",s=o.options.translation.makeImageOpaque):(a="opacities",s=o.options.translation.makeImageTransparent),(n=n||{}).toolbarIcon={svg:!0,html:a,tooltip:s,className:"lock"===l?"disabled":""},n.subToolbar=new L.Toolbar2({actions:[e,i]}),L.setOptions(this,n),L.EditAction.prototype.initialize.call(this,t,o,n)},addHooks:function(){}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:'
    ',tooltip:"Go to the Eiffel Tower",className:"leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),ImmediateSubAction.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,o,n){var a,s,r=o.editing,l=r._mode;r._transparent?(a="opacity_empty",s=o.options.translation.makeImageOpaque):(a="opacities",s=o.options.translation.makeImageTransparent),(n=n||{}).toolbarIcon={svg:!0,html:a,tooltip:s,className:"lock"===l?"disabled":""},n.subToolbar=new L.Toolbar2({actions:[e,i]}),L.setOptions(this,n),L.EditAction.prototype.initialize.call(this,t,o,n)},addHooks:function(){}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:'
    ',tooltip:"Go to the Eiffel Tower",className:"leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),t.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 1f80d7754..96c69339f 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '
    ',\n tooltip: 'Go to the Eiffel Tower',\n className: 'leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n ImmediateSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar","Cancel","OpacitiesSubAction","myAction","setView","ImmediateSubAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '
    ',\n tooltip: 'Go to the Eiffel Tower',\n className: 'leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar","Cancel","OpacitiesSubAction","myAction","setView","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 211269c0b..e68a5076a 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -64,7 +64,7 @@ var OpacitiesBar = OpacitiesSubAction.extend({ }, addHooks: function() { this.map.setView([48.85815, 2.29420], 19); - ImmediateSubAction.prototype.addHooks.call(this); + OpacitiesSubAction.prototype.addHooks.call(this); }, }); From e1ac4a3b15f748a631f491a12c6faf86d6569f1f Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 08:15:32 +0200 Subject: [PATCH 21/73] sub-menu test 10 --- dist/leaflet.distortableimage.css | 12 ++-- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/EditAction.js | 1 + src/edit/actions/OpacitiesAction.js | 96 ++++++++++++++++++++++++++-- 5 files changed, 99 insertions(+), 14 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index fe444ae81..eb1a18919 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -222,21 +222,23 @@ a.leaflet-toolbar-icon[title='Loading...'] { } .leaflet-toolbar-icon-vertical { - background-color: rgba(0, 0, 0, 1); + background-color: rgba(255, 255, 255, 1); border: inset 0.5px lightgray; + float: none !important; + margin: auto !important; } .leaflet-toolbar-1 { border-radius: 0px 0px 4px 4px !important; } .leaflet-toolbar-icon-range { - display: inline-block !important; - /*writing-mode: bt-lr !important; + /*display: inline-block !important; + writing-mode: bt-lr !important; appearance: slider-vertical !important; - -webkit-appearance: slider-vertical !important;*/ + -webkit-appearance: slider-vertical !important; transform: rotate(90deg); width: auto; - height: 120px !important; + height: 120px !important;*/ float: none !important; margin: auto !important; } diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index e6c2def24..f42273b3c 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(t,o,n){var a,s,r=o.editing,l=r._mode;r._transparent?(a="opacity_empty",s=o.options.translation.makeImageOpaque):(a="opacities",s=o.options.translation.makeImageTransparent),(n=n||{}).toolbarIcon={svg:!0,html:a,tooltip:s,className:"lock"===l?"disabled":""},n.subToolbar=new L.Toolbar2({actions:[e,i]}),L.setOptions(this,n),L.EditAction.prototype.initialize.call(this,t,o,n)},addHooks:function(){}});var t=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),e=t.extend({options:{toolbarIcon:{html:'
    ',tooltip:"Go to the Eiffel Tower",className:"leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range"}},addHooks:function(){this.map.setView([48.85815,2.2942],19),t.prototype.addHooks.call(this)}}),i=t.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.tooltip.style&&this._link.setAttribute("style",n.tooltip.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=e.extend({opacity:1,options:{toolbarIcon:{html:function(){return t.opacity},tooltip:function(){return"Opacity "+t.opacity+"%"},className:"leaflet-toolbar-icon-vertical",style:function(){return"background-color:#000; opacity:"+t.opacity/100}}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=e.extend({opacity:20,options:{toolbarIcon:{html:function(){return t.opacity},tooltip:function(){return"Opacity "+t.opacity+"%"},className:"leaflet-toolbar-icon-vertical",style:function(){return"background-color:#000; opacity:"+t.opacity/100}}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=e.extend({opacity:40,options:{toolbarIcon:{html:function(){return t.opacity},tooltip:function(){return"Opacity "+t.opacity+"%"},className:"leaflet-toolbar-icon-vertical",style:function(){return"background-color:#000; opacity:"+t.opacity/100}}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=e.extend({opacity:60,options:{toolbarIcon:{html:function(){return t.opacity},tooltip:function(){return"Opacity "+t.opacity+"%"},className:"leaflet-toolbar-icon-vertical",style:function(){return"background-color:#000; opacity:"+t.opacity/100}}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=e.extend({opacity:80,options:{toolbarIcon:{html:function(){return t.opacity},tooltip:function(){return"Opacity "+t.opacity+"%"},className:"leaflet-toolbar-icon-vertical",style:function(){return"background-color:#000; opacity:"+t.opacity/100}}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=e.extend({opacity:100,options:{toolbarIcon:{html:function(){return t.opacity},tooltip:function(){return"Opacity "+t.opacity+"%"},className:"leaflet-toolbar-icon-vertical",style:function(){return"background-color:#000; opacity:"+t.opacity/100}}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=e.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 96c69339f..2cd7f2350 100644 --- a/dist/leaflet.distortableimage.js.map +++ b/dist/leaflet.distortableimage.js.map @@ -1 +1 @@ -{"version":3,"file":"leaflet.distortableimage.js","mappings":"kCAAAA,EAAEC,sBAAwBD,EAAEE,aAAaC,OAAO,CAC9CC,QAAS,CACPC,UAAU,EACVC,WAAY,CACVC,eAAgB,iCAChBC,UAAW,0BACXC,UAAW,kCAIfC,WAV8C,SAUnCN,GACTJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEE,aAAaW,UAAUH,WAAWI,KAAKF,KAAMR,GAC/CJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAKP,SAAWO,KAAKR,QAAQC,UAG/BY,MAlB8C,SAkBxCC,GACJlB,EAAEE,aAAaW,UAAUI,MAAMH,KAAKF,KAAMM,GAE1CN,KAAKO,KAAOD,EAERN,KAAKP,UAAYO,KAAKQ,QAAQC,SAMlCT,KAAKU,GAAG,WAAYV,KAAKW,WAAYX,MACrCA,KAAKU,GAAG,cAAeV,KAAKY,cAAeZ,OAG7Ca,SAjC8C,WAkCxCb,KAAKQ,SAAWR,KAAKQ,QAAQM,UAEjCd,KAAKe,IAAI,WAAYf,KAAKW,WAAYX,MACtCA,KAAKe,IAAI,cAAef,KAAKY,cAAeZ,OAG9CW,WAxC8C,SAwCnCK,GACT,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASR,GAAGO,EAAO,CACnBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASR,GAAGO,EAAMM,aAAc,CAChCC,UAAWxB,KAAKyB,gBAEhBC,YAAa1B,KAAK2B,uBACjB3B,OAGLY,cAvD8C,SAuDhCI,GACZ,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASH,IAAIE,EAAO,CACpBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASH,IAAIE,EAAMM,aAAc,CACjCC,UAAWxB,KAAKyB,gBAChBC,YAAa1B,KAAK2B,uBACjB3B,OAGL2B,sBArE8C,SAqExBX,GAAG,WAClBhB,KAAKP,WAEVuB,EAAEY,iBAEF5B,KAAK6B,WAAU,SAACZ,GACd,IAAMa,EAAOb,EAAMT,QACfS,EAAMM,eAAiBP,EAAEe,QAAUD,EAAKE,YAC1C5C,EAAE6C,QAAQC,YAAYjB,EAAMM,aAAc,aACtC,EAAKY,gBACPlB,EAAMmB,WACN,EAAK5B,QAAQ6B,eAEb,EAAK7B,QAAQ8B,uBAMrBC,YAxF8C,SAwFlCC,GACV,OAAOpD,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAGlDY,aA5F8C,WA8F5C,OADiBnC,KAAK0C,YACNC,KAAK3C,KAAKuC,YAAYK,KAAK5C,QAG7C6C,iBAjG8C,SAiG7B7B,EAAGC,GACdD,EAAE8B,UAEA7B,EAAMT,QAAQwB,WAChB5C,EAAE6C,QAAQC,YAAYlB,EAAEe,OAAQ,aAIhC/B,KAAKmC,eAAkBlB,EAAMmB,WAC1BpC,KAAKQ,QAAQ8B,kBAGtBb,gBA7G8C,SA6G9BT,GAAG,WACZhB,KAAKP,WAEVO,KAAK6B,WAAU,SAACZ,GACVA,EAAMM,eAAiBP,EAAEe,OAC3Bd,EAAMmB,WAEN,EAAKS,iBAAiB7B,EAAGC,MAIzBD,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCI,mBA3H8C,SA2H3BJ,GACjB,IAEIgC,EAFER,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAGZP,KAAKuC,YAAYC,IAEtBxC,KAAK6B,WAAU,SAACZ,GAGd,IAFAA,EAAMgC,iBAAmB,GACzBhC,EAAMmB,WACDY,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACtB,IAAIE,EAAIjC,EAAMkC,UAAUH,GACxB/B,EAAMgC,iBAAiBD,GAAK1C,EAAI8C,mBAAmBF,QAKzD5B,cA5I8C,SA4IhCN,GACZ,IAAMwB,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAEjB,GAAKP,KAAKuC,YAAYC,GAAtB,CAEA,IAAMa,EAAU/C,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDG,EAAQd,EAAQS,iBAAiB,GAAGM,SAASF,GAEnDrD,KAAKwD,4BAA4BF,EAAOd,KAG1CiB,UAxJ8C,WAwJlC,WAGV,OAFiBzD,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAQ,EAAKrB,YAAYtB,IAAmB,SAAT0C,MAIvCE,QAjK8C,SAiKtCrB,GAAS,WAGf,OAFiBxC,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAO3C,IAAUuB,GAAW,EAAKD,YAAYtB,IAAmB,SAAT0C,MAI3DH,4BA1K8C,SA0KlBF,EAAOd,GACjC,IAEIQ,EAFEc,EAAe9D,KAAK6D,QAAQrB,GAC5BuB,EAAI,IAAI3E,EAAE4E,eAAe,GAAIV,EAAMW,EAAG,GAAIX,EAAMY,GAGtDJ,EAAaK,SAAQ,SAAClD,GACpB,IAAImD,EAAc,GAClB,IAAKpB,EAAI,EAAGA,EAAI,EAAGA,IACjBoB,EAAYpB,GAAKe,EAAEM,UAAUpD,EAAMgC,iBAAiBD,IAEtD/B,EAAMqD,qBAAqBF,OAI/BG,kBAxL8C,SAwL5BC,GAIhB,OAHeA,EAAKC,QAAO,SAASC,EAAKC,GACvC,OAAOD,EAAMC,EAAIC,eAChB,GACaJ,EAAKK,QAGvBC,mBA/L8C,WAgM5C,IAAMC,EAAO,CACbA,OAAc,IA4Bd,OA1BA/E,KAAK6B,WAAU,SAASZ,GACtB,GAAIjB,KAAKuC,YAAYtB,GAAQ,CAC3B,IAAI+D,EAAW/D,EAAMgE,OAAOC,IAAIC,MAAM,KAClCC,EAAWJ,EAASA,EAASH,OAAO,GACpCQ,EAAKpE,EAAMqE,aACXC,EAAU,CACZ,CAACC,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,MAE9BX,EAAKY,OAAOC,KAAK,CACfC,GAAI7F,KAAK8F,WAAW7E,GACpBiE,IAAKjE,EAAMgE,OAAOC,IAClBa,MAAO9E,EAAMgE,OAAOc,MACpBC,OAAQ/E,EAAMgE,OAAOe,OACrBC,gBAAiBb,EACjBc,MAAOX,EACPX,aAAcxF,EAAE+G,UAAUC,cAAcnF,QAG3CjB,MAEH+E,EAAKY,OAASZ,EAAKY,OAAOU,UAC1BtB,EAAKuB,iBAAmBtG,KAAKuE,kBAAkBQ,EAAKY,QAE7CZ,KAIX3F,EAAEmH,sBAAwB,SAASV,EAAIrG,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBwG,EAAIrG,K,eClOzCJ,EAAEoH,wBAA0BpH,EAAEqH,aAAalH,OAAO,CAEhDC,QAAS,CACPwG,OAAQ,IACRU,aAAa,EAEbC,aAAc,GACdlH,UAAU,EACVkE,KAAM,UACNiD,UAAU,GAGZ9G,WAZgD,SAYrC+G,EAAKrH,GACdJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAK2G,aAAe3G,KAAKR,QAAQmH,aACjC3G,KAAKP,SAAWO,KAAKR,QAAQC,SAC7BO,KAAK8G,UAAY9G,KAAKR,QAAQoH,SAC9B5G,KAAK+G,KAAOF,EACZ7G,KAAKgH,SAAW,IAGlB3G,MAvBgD,SAuB1CC,GAAK,WACTN,KAAKO,KAAOD,EACPN,KAAKuB,cAAgBvB,KAAKiH,aAE/B3G,EAAII,GAAG,YAAaV,KAAKkH,OAAQlH,MAE7BA,KAAKR,QAAQ+F,UACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QACzBjF,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAYV,KAAKuH,aAAcvH,OAK1CZ,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAAQ,WAIvC,GAHA,EAAKiG,UAAUC,YAAY,EAAKlG,cAChC,EAAKmG,uBAED,EAAKlI,QAAQwH,SAAU,CACzB,IAAMW,EAAQ,EAAKnI,QAAQwH,SAASY,IAAM,MAAQ,MAClD,EAAKC,SAAS,EAAKrI,QAAQwH,SAASW,GAAQA,QAE5C,EAAKX,SAAW,CAACY,IAAK,EAAGE,IAAK,GAC9B,EAAKZ,SAIF,EAAKC,UACJ7G,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAY,EAAK6G,aAAc,GAK1C,IAAMQ,EAAe,EAAKC,cACtBD,GACF,EAAKE,GAAKF,EAAaG,OAAOC,KAAKJ,GAAc,IAC7C,EAAKE,GAAGxI,UAAY,EAAKe,QAAQC,WAEjC,EAAKhB,UAAY,EAAKe,QAAQC,SAClC,EAAKwH,GAAK,SAId7I,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACvDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MAMGM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAG7CA,KAAK6I,KAAK,QAGZhI,SArFgD,SAqFvCP,GACPlB,EAAE8B,SAASH,IAAIf,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACxDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MACHZ,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAExCA,KAAKQ,SAAWR,KAAKQ,QAAQM,UACjCd,KAAK6I,KAAK,UAEVzJ,EAAEqH,aAAaxG,UAAUY,SAASX,KAAKF,KAAMM,IAG/CoH,qBApGgD,WAqG9C,IAAMpH,EAAMN,KAAKO,KACXuI,EAAqB1J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,SAC3DyH,EAAsB5J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,UAC5D0H,EACFC,SAASJ,GAAsBI,SAASF,GACtCG,EAAcnJ,KAAKR,QAAQwG,OAC3BoD,EAAaF,SAASD,EAAcE,GACpCE,EAAS/I,EAAIgJ,QAAQhJ,EAAIiJ,aACzBC,EAASpK,EAAEqK,MAAML,EAAYD,GAAaO,SAAS,GACrD1J,KAAKR,QAAQ+F,QACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QAE7BvF,KAAKmH,SAAW,CACd7G,EAAIqJ,UAAUN,EAAO9F,SAASiG,IAC9BlJ,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIJ,KAI7BxJ,KAAK6J,mBAAqB,CACxB,OAAUR,EACV,OAAUG,EACV,KAAQlJ,EAAIwJ,WAGd9J,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,gBAGrCoD,aAlIgD,SAkInC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKoC,YAIvCkG,sBAvIgD,WAwI9C,IAAMhI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAC5CZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKoC,SAAUpC,OAGnDwI,qBA7IgD,WA8I9C,IAAMlI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAC3CZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKoC,SAAUpC,OAGpDkK,WAnJgD,WAoJ9C,OAAOlK,KAAK8G,WAGd1E,SAvJgD,WAwJ9C,IAAMN,EAAO9B,KAAKQ,QAClB,GAAKsB,EAAKE,UAOV,OALAF,EAAKQ,iBACLR,EAAKqI,eAELnK,KAAK8G,WAAY,EACjB9G,KAAK6I,KAAK,YACH7I,MAGToI,OAnKgD,SAmKzCpH,GACL,IAAMc,EAAO9B,KAAKQ,QACZyH,EAAKjI,KAAKiI,GAEhB,GAAKnG,EAAKE,UAAV,CAYA,GAXIhB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,GAGpChB,KAAKoK,wBAELpK,KAAK8G,WAAY,EACjBhF,EAAKO,cACLP,EAAKuI,eACLrK,KAAK6I,KAAK,WAGNZ,IAAMA,EAAG9F,eAKb,OAAOnC,KAJLA,KAAKoC,aAOTgI,sBA3LgD,WA4L9CpK,KAAKO,KAAKsB,WAAU,SAACZ,GACfA,aAAiB7B,EAAEoH,yBACrBvF,EAAMmB,eAKZkI,UAnMgD,SAmMtCC,EAAQC,GAChB,IAAM1I,EAAO9B,KAAKQ,QAalB,OAXAR,KAAKmH,SAASoD,GAAUC,EAExBxK,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT8K,sBApNgD,SAoN1BC,EAAMR,EAAQjK,GAClC,OAAIA,EAAId,QAAQwL,IAAIC,QAAU7L,EAAE8L,IAAID,SAKrB,IAATF,GACFI,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI,EACrCkH,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,GAAK,MAEzCiH,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI6G,EAAO,EAC5CK,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,EAAImH,KAAKC,IAAI,EAAGP,IAAS,KAEvDI,GAAcC,GATtB,IAAID,EACAC,GAYRG,WArOgD,SAqOrCC,GACT,IAAMlL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAGR,IAAK,IAAIyI,KAAKD,EACZ,GAAIxL,KAAK8K,sBAAsBC,EAAMS,EAAUC,GAAInL,GAIjD,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAI4C,KAAKD,EACZxL,KAAKmH,SAASnE,GAAKwI,EAAUC,GAC7BzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGTsE,qBAtQgD,SAsQ3BoH,GACnB,IAAMpL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAER,IAAK,IAAIyI,KAAKC,EAAW,CACvB,IAAMnB,EAASjK,EAAIqL,mBAAmBD,EAAUD,IAEhD,GAAIzL,KAAK8K,sBAAsBC,EAAMR,EAAQjK,GAI3C,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAI4C,KAAKC,EACZ1L,KAAKmH,SAASnE,GAAK1C,EAAIqL,mBAAmBD,EAAUD,IACpDzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT4L,QAxSgD,SAwSxCC,GACN,IAEI7I,EACAe,EAHEzD,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAG5BuC,EAAgB,GAEpB,GAAc,IAAVD,EAAJ,CAEA,IAAK7I,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EACCgJ,QAAQtJ,KAAKmD,UAAUH,IACvBO,SAAS8F,GACT0C,WAAWF,GACXjC,IAAIP,GACTyC,EAAc9I,GAAK1C,EAAIqJ,UAAU5F,GAKnC,OAFA/D,KAAKuL,WAAWO,GAET9L,OAGTgM,SA/TgD,WA+TzB,IAAdC,EAAc,uDAAP,MACRC,EAASlM,KAAKuB,aAAa4K,MAAM/M,EAAE6C,QAAQmK,WAC5CjH,MAAM,YAAY,GAClBkH,MAAM,GAAI,GACVlH,MAAM,KAELmH,EAAQJ,EAAO,GACfK,EAAQL,EAAO,GACfM,EAAQN,EAAO,GACfO,EAAQP,EAAO,GAEfQ,EAAcJ,EAAQG,EAAQF,EAAQC,EAExCG,EAAQvN,EAAEwN,SAASC,UAAUP,EAAOC,EAAO,OAU/C,OARIG,EAAc,IAChBC,GAASA,EAAQ,EAAItB,KAAKyB,IAAMzB,KAAKyB,IAGnCH,EAAQ,IACVA,EAAQ,EAAItB,KAAKyB,GAAKH,GAGR,QAATV,EACHZ,KAAK0B,MAAM3N,EAAEwN,SAASI,iBAAiBL,IACvCvN,EAAE6N,KAAKC,UAAUP,EAAO,IAG9B9E,SA3VgD,SA2VvC8E,GAAqB,IAAdV,EAAc,uDAAP,MACfkB,EAAenN,KAAKgM,SAASC,GAC7BmB,EAAkBT,EAAQQ,EAGhC,OAFAnN,KAAKqN,SAASD,EAAiBnB,GAExBjM,MAGTqN,SAnWgD,SAmWvCV,GAAqB,IAIxB3J,EACAe,EACAuJ,EANUrB,EAAc,uDAAP,MACf3L,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAC5BhE,EAAU,GASd,IAJa,QAAT0G,IACFU,EAAQvN,EAAEwN,SAASW,iBAAiBZ,IAGjC3J,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAAS8F,GAC5CiE,EAAIlO,EAAEqK,MACF4B,KAAKmC,IAAIb,GAAS5I,EAAEE,EAAIoH,KAAKoC,IAAId,GAAS5I,EAAEG,EAC5CmH,KAAKoC,IAAId,GAAS5I,EAAEE,EAAIoH,KAAKmC,IAAIb,GAAS5I,EAAEG,GAEhDqB,EAAQvC,GAAK1C,EAAIqJ,UAAU2D,EAAE1D,IAAIP,IAKnC,OAFArJ,KAAKuL,WAAWhG,GAETvF,MAGT0N,OA7XgD,SA6XzCC,EAAaC,GAClB,IACI5K,EACAe,EAFEzD,EAAMN,KAAKO,KAGbsN,EAAe,GACbvK,EAAQhD,EAAIgJ,QAAQqE,GAAapK,SAASjD,EAAIgJ,QAAQsE,IAE5D,IAAK5K,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAASD,GAC5CuK,EAAa7K,GAAK1C,EAAIqJ,UAAU5F,GAGlC/D,KAAKuL,WAAWsC,IAGlBC,QA5YgD,WAwZ9C,IAXA,IAAMxN,EAAMN,KAAKO,KACX8I,EAASrJ,KAAK6J,mBAAmBR,OACjCG,EAASxJ,KAAK6J,mBAAmBL,OACjCuB,EAAO/K,KAAK6J,mBAAmBkB,KAC/BxF,EAAU,CACd8D,EAAO9F,SAASiG,GAChBH,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,IACrCmF,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,IACrCmF,EAAOO,IAAIJ,IAGJxG,EAAI,EAAGA,EAAI,EAAGA,IAChB1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,GAAMgD,OAAO/N,KAAKmD,UAAUH,KACzDhD,KAAKsK,UAAUtH,EAAG1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,IAOhD,OAHA/K,KAAK6K,QAAS,EACd7K,KAAK6I,KAAK,WAEH7I,MAKTgO,oBAtagD,SAsa5BvE,GAOlB,IAAMwE,EAAO7O,EAAEiI,QAAQ6G,SAEjBC,GAASF,EAAO,KAAO,IAAM,IAEnC,MAHa,aAAeA,EAAO,KAAO,IAAM,IAGlCxE,EAAMxF,EAAI,MAAQwF,EAAMvF,EAAI,KAAOiK,GAGnDjH,OApbgD,WAqb9C,IAAM5G,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACb6B,EAAqBhE,EAAEwD,KAAKtC,EAAI8C,mBAAoB9C,GACpD+N,EAAkBrO,KACnBsO,8BAA8BlL,GAC7BC,EAAUD,EAAmBpD,KAAKmD,UAAU,IAC5CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,KAK5DP,EAAMjC,MAAM/M,EAAE6C,QAAQmK,UAAY,WAAa,QAE/CpM,KAAKgH,SAASY,IAAM5H,KAAKgM,WACzBhM,KAAKgH,SAASc,IAAM9H,KAAKgM,SAAS,QASpCzE,aAldgD,SAkdnCqH,GACX,IAAMtO,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACbsN,EAAwB,SAASrE,GACrC,OAAOlK,EAAIwO,uBAAuBtE,EAAQoE,EAAM7D,KAAM6D,EAAMvF,SAExDgF,EAAkBrO,KAAKsO,8BACzBO,GAEExL,EAAUwL,EAAsB7O,KAAKmD,UAAU,IAC/CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,MAG9DrJ,WAregD,WAse9C,OAAOtF,KAAKmH,UAGdhE,UAzegD,SAyetCH,GACR,OAAOhD,KAAKmH,SAASnE,IAIvBuG,UA9egD,WA+e9C,IAAMjJ,EAAMN,KAAKO,KACXkE,EAASzE,KAAKsF,aAAab,QAAO,SAASsK,EAAKxE,GACpD,OAAOwE,EAAInF,IAAItJ,EAAIgJ,QAAQiB,MAC1BnL,EAAEqK,MAAM,EAAG,IACd,OAAOnJ,EAAIqJ,UAAUlF,EAAOiF,SAAS,KAGvC4E,8BAtfgD,SAsflBU,GAI5B,IAIIC,EAJEzF,EAASwF,EAAkBhP,KAAKmD,UAAU,IAC1C+L,EAAIlP,KAAKuB,aAAa4N,aAAe,IACrCC,EAAIpP,KAAKuB,aAAa8N,cAAgB,IACxCnM,EAAI,GAGR,IAAK+L,EAAI,EAAGA,EAAI,EAAGA,IACjB/L,EAAE0C,KAAKoJ,EAAkBhP,KAAKmD,UAAU8L,IAAIK,UAAU9F,IAcxD,OAAOpK,EAAEmQ,WAAWC,oBAChB,EAAG,EAAGtM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAG,EAAGhM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnB,EAAGkL,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAGE,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,MAK3B9E,EAAEqQ,wBAA0B,SAAS5J,EAAIrG,GACvC,OAAO,IAAIJ,EAAEoH,wBAAwBX,EAAIrG,IAG3CJ,EAAEsQ,IAAIC,aAAY,WACXvQ,EAAE6C,QAAQQ,SAASzC,KAAK4P,eAAgB,QAC3CxQ,EAAE6C,QAAQ4N,SAAS7P,KAAK4P,eAAgB,W,0BC9hB5CxQ,EAAE6C,QAAU7C,EAAE6C,SAAW,GACzB7C,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBqF,UAAY3Q,EAAE4Q,QAAQzQ,OAAO,CAE9CC,QAAS,CACPyQ,SAAU,YAGZnQ,WAN8C,SAMnCQ,EAAKd,GACdQ,KAAKO,KAAOD,EACZlB,EAAEW,WAAWC,KAAMR,IAGrB0Q,SAX8C,WAYvClQ,KAAKmQ,aACRnQ,KAAKoQ,WAAapQ,KAAKqQ,kBACvBrQ,KAAKsQ,eAAiBtQ,KAAKuQ,QAC3BvQ,KAAKwQ,SAAWxQ,KAAKyQ,gBACrBzQ,KAAK0Q,WAAW1Q,KAAKoQ,WAAYpQ,KAAKsQ,eAAgBtQ,KAAKwQ,UAE3DpR,EAAE8B,SAASR,GAAGV,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE7DZ,EAAE8B,SAAS0P,wBAAwB5Q,KAAKoQ,YACxChR,EAAE8B,SAAS2P,yBAAyB7Q,KAAKoQ,cAI7CU,YAzB8C,WA0BxC9Q,KAAKmQ,aACP/Q,EAAE8B,SAASH,IAAIf,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE9DZ,EAAE6C,QAAQ8O,OAAO/Q,KAAKwQ,UACtBpR,EAAE6C,QAAQ8O,OAAO/Q,KAAKsQ,gBACtBlR,EAAE6C,QAAQ8O,OAAO/Q,KAAKoQ,YACtBpQ,KAAKmQ,YAAa,IAItBE,gBApC8C,WAqC5C,IAAMW,EAAY5R,EAAE6C,QAAQgP,OAAO,MAAO,sBAC1CD,EAAUE,aAAa,KAAM,iBAE7B,IAAMC,EAAU/R,EAAE6C,QAAQgP,OAAO,KAAM,WAGvC,OAFAD,EAAUvJ,YAAY0J,GAEfH,GAGTP,cA9C8C,WA+C5C,IAAMW,EAAUhS,EAAE6C,QAAQgP,OAAO,IAAK,IAUtC,OATAG,EAAQC,UAAYjS,EAAEkS,SAASL,OAAO,iBAEtCG,EAAQF,aAAa,KAAM,oBAC3BE,EAAQF,aAAa,OAAQ,KAC7BE,EAAQF,aAAa,QAAS,eAE9BE,EAAQF,aAAa,OAAQ,UAC7BE,EAAQF,aAAa,aAAc,eAE5BE,GAGTb,MA5D8C,WA6D5C,IAAMgB,EAAOnS,EAAE6C,QAAQgP,OAAO,MAAO,IAIrC,OAHAM,EAAKL,aAAa,KAAM,qBACxBK,EAAKpF,MAAMqF,QAAU,OAEdD,GAGTb,WApE8C,SAoEnCM,EAAWO,EAAME,GAC1BzR,KAAKmQ,WAAa/Q,EAAEsS,QAAQ,CAACzB,SAAUjQ,KAAKR,QAAQyQ,WAEpDjQ,KAAKmQ,WAAW9P,MAAQ,WAuBtB,OAtBA2Q,EAAUvJ,YAAY8J,GACtBA,EAAKI,mBACD,YACA,k3CAkBJX,EAAUvJ,YAAYgK,GACfT,GAGThR,KAAKmQ,WAAWyB,MAAM5R,KAAKO,OAG7BoQ,iBApG8C,SAoG7B3P,GACfA,EAAEY,iBAEF5B,KAAKoQ,WAAWyB,UACgB,kCAA9B7R,KAAKoQ,WAAWyB,UACd,qCACA,gCAGJ7R,KAAKsQ,eAAenE,MAAMqF,QACc,SAAtCxR,KAAKsQ,eAAenE,MAAMqF,QAAqB,QAAU,OAG3DxR,KAAKwQ,SAASa,UACgB,UAA5BrR,KAAKwQ,SAASa,UACZjS,EAAEkS,SAASL,OAAO,iBAClB,QAGJ7R,EAAEkS,SAASQ,YAAY9R,KAAKwQ,SAAU,cAAe,eACrDpR,EAAE6C,QAAQC,YAAYlC,KAAKwQ,SAAU,eAGvCuB,eA3H8C,WA4H5C,IAAIC,SAASC,cAAc,sBAA3B,CAEA,IAAMC,EAAK9S,EAAE6C,QAAQgP,OAAO,MAAO,IACnCiB,EAAGrM,GAAK,oBACRqM,EAAGhB,aAAa,SAAU,UAE1BlR,KAAKmS,UAAW,IAAI/S,EAAEgT,kBAAmBC,SACzCH,EAAGb,UAAYrR,KAAKmS,SAEpBH,SAASC,cAAc,8BAA8BxK,YAAYyK,OAIrE9S,EAAEsL,iBAAiBqF,UAAUJ,aAAY,WACvCvQ,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACrClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACvClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GAAK,EAC5C,EAGgD,IAA9ClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,IAAalT,EAAEiI,QAAQkL,SAChE,EAAK9R,SACL,EAAKsR,qBAIT3S,EAAE0Q,iBAAiB0C,UAAY,SAAClS,EAAKd,GACnC,OAAO,IAAIJ,EAAEsL,iBAAiBqF,UAAUzP,EAAKd,K,eC3J/CJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEC,sBAAsBoT,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CAC9CC,QAAS,CACPkT,OAAQtT,EAAE0Q,iBAAiB6C,kBAG7B7S,WAL8C,SAKnC8S,EAAOpT,GAChBQ,KAAK6S,OAASD,EACd5S,KAAK8S,YAAcF,EAAMpT,QAAQE,WAEjCN,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB6C,iBAAiBI,OAAS,iBAG/C7C,SAd8C,WAe5C,IACM5P,EADQN,KAAK6S,OACDtS,KAElBP,KAAKgT,YAAchT,KAAKR,QAAQyT,QAChCjT,KAAKkT,YACD9T,EAAEwD,KAAKxD,EAAEe,MAAMgT,aAAanT,KAAM,cAAe,aACjDA,KAAKoT,YAAapT,MAEtBZ,EAAE8B,SAASR,GAAGsR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE9CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAGlDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQC,aAG/CqQ,YAxC8C,WAyC5C,IACMxQ,EADQN,KAAK6S,OACDtS,KAElBnB,EAAE8B,SAASH,IAAIiR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE/CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MAGnDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAKsT,gBACLtT,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQM,cAG/CL,OA9D8C,WAiE5C,OAFAT,KAAKyT,UAAW,EAChBzT,KAAKkQ,WACElQ,MAGTc,QApE8C,WAuE5C,OAFAd,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAGTqT,WA1E8C,SA0EnCrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KAExB3T,KAAK0T,IAEN1T,KAAK6S,OAAO1Q,gBACdnC,KAAK0T,GAAaxT,KAAKF,OAI3B0I,aArF8C,SAqFjC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKsT,cAActS,IAIrDsH,sBA1F8C,WA2F5C,IAAMhI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MACjDZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKsT,cAAetT,OAGxDwI,qBAhG8C,WAiG5C,IAAMlI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAChDZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKsT,cAAetT,OAGzDsT,cAtG8C,SAsGhCtS,GACZ,IAAI4S,EAEA5S,IAAK4S,EAAK5S,EAAE6S,eAKZD,IAAOA,EAAG9Q,UAAY8Q,EAAG7R,kBAAkB+R,oBAI/C9T,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB7B,EAAE6C,QAAQ8R,YAAY9S,EAAMM,aAAc,aAC1CN,EAAMmB,cAGRpC,KAAKsC,iBAEDtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCgT,aA5H8C,WA4H/B,WACRhU,KAAKiU,QAAQ7U,EAAE8U,eAEpBlU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd2T,UAELlT,EAAMmB,gBAKZgS,WAzI8C,WAyIjC,WACNpU,KAAKiU,QAAQ7U,EAAEiV,aAEpBrU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd8T,QAELlV,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CiS,gBAtJ8C,SAsJ9BxS,GAAG,WACXuT,EAAMvT,EAAEwT,iBACRlU,EAAMN,KAAK6S,OAAOtS,KAExBP,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB,IAAMa,EAAOb,EAAMT,QAEfS,EAAMiJ,cAAgBjJ,EAAMmB,WAEhC,IAAM2I,EAAOzK,EAAIwJ,UACXT,EAAS/I,EAAIiJ,YACfkL,EAAYrV,EAAE4K,aAAa/I,EAAMkC,UAAU,GAAIlC,EAAMkC,UAAU,IAEnEsR,EAAYnU,EAAIoU,8BAA8BD,EAAW1J,EAAM1B,GAC3DkL,EAAII,WAAWF,IAAc3S,EAAKE,YAC/B,EAAKyI,SAAW,EAAKpI,cAC1BjD,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CqT,aA3K8C,SA2KjC5T,GAAG,WACd,GAAKhB,KAAKiU,QAAQ7U,EAAEyV,cAApB,CAEA,IAAMC,EAAiB9U,KAAK6S,OAAOpP,YAC7BsR,EAAID,EAAejQ,OAEf,IAANkQ,IAEW3V,EAAE6C,QAAQ+S,eAAeD,KAGtCD,EAAe3Q,SAAQ,SAAClD,GACtB,EAAK4R,OAAOoC,YAAYhU,MAErBjB,KAAK6S,OAAO1Q,gBACfnC,KAAKsC,kBAILtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,MAGtCkU,aAjM8C,WAkMvClV,KAAKmV,mBACRnV,KAAK8S,YAAYsC,gBAAaC,GAGhCC,cAActV,KAAKuV,iBAGrBlT,YAzM8C,WA0M5C,IAAMuQ,EAAQ5S,KAAK6S,OACbvS,EAAMsS,EAAMrS,KAEdqS,EAAMpT,QAAQgW,iBAAmBxV,KAAKyK,UAE1CzK,KAAKyK,QAAUrL,EAAE0Q,iBAAiB2F,WAAW,CAC3CxC,QAASjT,KAAKgT,YACd/C,SAAU,YACT2B,MAAMtR,EAAKsS,KAGhBtQ,eArN8C,WAsN5C,IAAMhC,EAAMN,KAAK6S,OAAOtS,KACxB,IAAIP,KAAKyK,QAIP,OAAO,EAHPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,GAMnBwJ,QA/N8C,SA+NtCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDE,QAnO8C,SAmOtCF,GAMN,MALwB,yBAApBA,EAAMG,WAAyC7V,KAAKiU,QAAQyB,KAC9D1V,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,eAEArC,MAGT8V,WA5O8C,SA4OnCJ,GAAO,WAWhB,OAVA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,OAAI,EAAKhD,YAAYgD,KAASN,IAC5B,EAAKpT,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,eACE,MAKJrC,MAGToT,YA1P8C,WA0PhC,WACZ,GAAKpT,KAAKiU,QAAQ7U,EAAE8W,cAEpB,OAAO,IAAIC,SAAQ,SAACC,GAClB,IAGIxW,EAHEyW,EAAO,EAAKvD,YAClBuD,EAAKD,QAAUA,EAGf,EAAKb,eAAiB,KAmEtB,EAAKJ,mBAAqBkB,EAAKjB,WAC1B,EAAKD,mBACRkB,EAAKjB,WAAa,EAAKvC,OAAO/N,qBAAqBa,QAGrD0Q,EAAKC,UAAYD,EAAKC,WAAa,IACnCD,EAAKxK,MAAQwK,EAAKxK,OAAS,IAC3BwK,EAAKE,QAAUF,EAAKE,SAvEI,SAACC,IACvBA,EAAOC,KAAKC,MAAMF,IAETG,aACH/W,IAAc4W,EAAKG,YAAcH,EAAKG,WAAWC,MAAM,WAIzDhX,EAAY4W,EAAKG,YAIC,aAAhBH,EAAKK,SACPvB,cAAc,EAAKC,gBAEd,EAAKJ,mBACR,EAAKrC,YAAYsC,gBAAaC,GAGhCe,IACiB,OAAbI,EAAKM,KACPC,MAAM,qBAAuBV,EAAKxW,UAAY2W,EAAKM,MAMvDE,QAAQC,IAAIT,KA6ChBH,EAAKa,gBAAkBb,EAAKa,iBAvCI,SAACV,GAC/B5W,EAAYyW,EAAKzW,UAAY4W,EAE7B,EAAKjB,eAAiB4B,aAAY,WAChC,IACMC,EAAM,IAAIC,QAAJ,UAAezX,EAAf,YAA4B0X,KAAKC,OAD7B,CAACC,OAAQ,QAEzBC,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKrB,EAAKE,WACZF,EAAKC,YA6BVD,EAAKyB,eAAiBzB,EAAKyB,gBAzBI,SAACC,GAC9B,IAAMC,EAAO,IAAIC,SACjBD,EAAKE,OAAO,aAAczB,KAAK0B,UAAUJ,EAAW3C,aACpD4C,EAAKE,OAAO,QAASH,EAAWlM,OAChCmM,EAAKE,OAAO,UAAU,GAEtB,IAAME,EAAU,CAACZ,OAAQ,OAAQa,KAAML,GACjCZ,EAAM,IAAIC,QAAQU,EAAWpY,eAAgByY,GACnDX,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKK,EAAWb,kBAerBb,EAAKyB,eAAezB,SAK1BjX,EAAEmH,sBAAsBzE,KAAO,SAAC8Q,EAAOpT,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBoT,KAAKG,EAAOpT,K,eCzVjDJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEsL,iBAAiB+H,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CACzCC,QAAS,CACP8Y,QAAS,GACTC,QAAS,gBACT7F,OAAQtT,EAAE0Q,iBAAiB0I,YAG7B1Y,WAPyC,SAO9B0C,EAAShD,GAClBQ,KAAKyY,SAAWjW,EAChBxC,KAAK0Y,eAAgB,EACrB1Y,KAAK4D,MAAQpB,EAAQhD,QAAQmE,KAC7B3D,KAAK2Y,cAAe,EACpB3Y,KAAK4Y,WAAY,EAEjBxZ,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB0I,WAAWzF,OAAS,aAIzC7C,SApByC,WAqBvC,IAAM1N,EAAUxC,KAAKyY,SAErBzY,KAAKgT,YAAchT,KAAKR,QAAQyT,QAGhCzQ,EAAQqW,eACR7Y,KAAK8Y,aACL9Y,KAAK+Y,eACL/Y,KAAKgZ,4BAGDxW,EAAQ0H,eAAiB1H,EAAQhD,QAAQgW,iBAC3CxV,KAAKqC,cAGPrC,KAAKiZ,cAAczW,EAAQyF,IAAKzF,EAAQyF,GAExC7I,EAAE8B,SAASR,GAAG8B,EAAQjB,aAAc,CAClC2X,SAAUlZ,KAAKmZ,UACdnZ,MAEHZ,EAAE8B,SAASR,GAAG0Y,OAAQ,UAAWpZ,KAAKqT,WAAYrT,OAIpD8Q,YA9CyC,WA+CvC,IAAMtO,EAAUxC,KAAKyY,SACfxQ,EAAKjI,KAAKiZ,YAOhB,IAAK,IAAII,KAJTrZ,KAAKsZ,mBAEDtZ,KAAKyK,SAAWzK,KAAKsC,iBAENtC,KAAKuZ,SACtBna,EAAE6C,QAAQ8O,OAAOsI,GAOfja,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAC3CnC,EAAE6C,QAAQ8R,YAAYvR,EAAQjB,aAAc,aAG1C0G,IAAQA,EAAG9F,gBAAkB8F,EAAGzH,QAAQiK,SAC1CxC,EAAGzH,QAAQ8B,iBAGblD,EAAE8B,SAASH,IAAIyB,EAAQjB,aAAc,CACnC2X,SAAUlZ,KAAKmZ,UACdnZ,MAEHZ,EAAE8B,SAASH,IAAIqY,OAAQ,UAAWpZ,KAAKqT,WAAYrT,OAGrDc,QA9EyC,WA+EvC,OAAKd,KAAKyT,UAEVzT,KAAKyY,SAASrW,WACdpC,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MALsBA,MAQ/B8Y,WAvFyC,WA2FvC,IAAK,IAAInV,KAHT3D,KAAKwZ,OAAS,GAGGpa,EAAEsL,iBAAiB+H,KAAKgH,MAAO,CAC9C,IAAI9D,EAASvW,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,IACD,IAAtC3D,KAAKgT,YAAY0G,QAAQ/D,KAC3B3V,KAAKwZ,OAAO7V,GAAQgS,GAMnB3V,KAAKwZ,OAAOxZ,KAAK4D,SACpB5D,KAAK4D,MAAQsE,OAAOC,KAAKnI,KAAKwZ,QAAQ,KAK1CT,aA1GyC,WA2GvC,IACI/V,EADER,EAAUxC,KAAKyY,SAIrB,IADAzY,KAAK2Z,aAAeva,EAAEwa,aACjB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAK2Z,aAAaE,SAASza,EAAE0a,WAAWtX,EAASQ,IAInD,IADAhD,KAAK+Z,cAAgB3a,EAAEwa,aAClB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAK+Z,cAAcF,SAASza,EAAE4a,YAAYxX,EAASQ,IAIrD,IADAhD,KAAKia,gBAAkB7a,EAAEwa,aACpB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKia,gBAAgBJ,SAASza,EAAE8a,cAAc1X,EAASQ,IAIzD,IADAhD,KAAKma,eAAiB/a,EAAEwa,aACnB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKma,eAAeN,SAASza,EAAEgb,aAAa5X,EAASQ,IAKvD,IADAhD,KAAKqa,mBAAqBjb,EAAEwa,aACvB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKqa,mBAAmBR,SAASza,EAAEkb,iBAAiB9X,EAASQ,IAI/D,IADAhD,KAAKua,aAAenb,EAAEwa,aACjB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKua,aAAaV,SAASza,EAAEob,WAAWhY,EAASQ,EAAG,CAACyX,WAAW,KAGlEza,KAAKuZ,SAAW,CACdlY,KAAMrB,KAAK2Z,aACX9N,MAAO7L,KAAK+Z,cACZW,QAAS1a,KAAKia,gBACdU,OAAQ3a,KAAKma,eACbS,WAAY5a,KAAKqa,mBACjBQ,KAAM7a,KAAKua,eAIfvB,0BAvJyC,WAwJvC,IAAM8B,EAAK9a,KAAKyY,SAGXzY,KAAK4D,OAKV5D,KAAK+a,iBAEAD,EAAG5Q,cAAgBlK,KAAKgb,eAC3Bhb,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASpa,aAGtCd,KAAKmb,OAAO,SAAWnb,KAAKob,mBAZ/Bpb,KAAKob,mBAeT/H,WA3KyC,SA2K9BrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KACvBmH,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAEZhR,GAAMA,EAAG9F,qBAEakT,IAAtBrV,KAAK0T,IAA+BoH,EAAGtb,QAAQgW,iBAC7CsF,EAAG5Q,cAAgBlK,KAAKyK,SAC1BzK,KAAK0T,GAAaxT,KAAKF,OAK7Bqb,YA1LyC,SA0L7BC,EAAKC,GAAM,WACrB,MAAuB,yBAAnBA,EAAK1F,WAAwC7V,KAAKiU,QAAQsH,IAG9Dvb,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASuF,EAAK,CAIhB,IAAK,IAAI3X,KAHT,EAAKrB,iBACL,EAAK0Q,YAAYgD,GAAOuF,EACxB,EAAKlZ,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU2X,UACnC,EAAK9B,OAAO7V,GACnB,EAAK6X,YAAY7X,IACRvE,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU4X,IACjD,EAAK/B,OAAO7V,GAAQ4X,GAGxB,OAAO,MAfFvb,MAqBX4V,QAjNyC,SAiNjCF,GACN,GAAwB,yBAApBA,EAAMG,YAAyC7V,KAAKiU,QAAQyB,GAAQ,CAItE,IAAK,IAAI/R,KAHT3D,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU+R,IAC1C1V,KAAKwZ,OAAO7V,GAAQ+R,GAGnB1V,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBAE1C,OAAOtC,MAGTiU,QAhOyC,SAgOjCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDI,WApOyC,SAoO9BJ,GAAO,WAgBhB,OAfA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASL,EAAO,CAIlB,IAAK,IAAI/R,KAHT,EAAKrB,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU+R,WACnC,EAAK8D,OAAO7V,GACnB,EAAK6X,YAAY7X,IAGrB,OAAO,MAGN3D,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBACjCtC,MAITwb,YAxPyC,SAwP7B7X,GACN3D,KAAKmb,OAAOxX,KACVuE,OAAOC,KAAKnI,KAAKyb,YAAY5W,QAAU,EACzC7E,KAAKmZ,YAEQ,SAATxV,GAAmB3D,KAAKob,kBAC5Bpb,KAAK4D,MAAQ,GACb5D,KAAK+a,mBAKXzY,eApQyC,WAqQvC,IACIhC,EADON,KAAKyY,SACHlY,KAETP,KAAKyK,UACPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,IAInB2Q,gBA9QyC,WA8QvB,WACZ5Y,EAAUxC,KAAKyY,SACbnY,EAAMkC,EAAQjC,KAEpBP,KAAKkb,SAAW,IAAI9b,EAAEsc,UAAUlZ,EAAQjB,cACxCvB,KAAKkb,SAASza,SAGdT,KAAKkb,SAASxa,GAAG,aAAa,WAC5B8B,EAAQqG,KAAK,aACb,EAAKvG,oBAOPtC,KAAKkb,SAASS,gBAAkB,WAC9B,IAEIC,EAEA5Y,EAJEK,EAAUb,EAAQW,UAAU,GAC5BG,EAAQtD,KAAK6b,QAAQtY,SAASjD,EAAI8C,mBAAmBC,IAEvDkC,EAAU,GAKd,IAFAvF,KAAK6I,KAAK,WAEL7F,EAAI,EAAGA,EAAI,EAAGA,IACjB4Y,EAAetb,EAAI8C,mBAAmBZ,EAAQW,UAAUH,IACxDuC,EAAQvC,GAAK1C,EAAIqL,mBAAmBiQ,EAAahS,IAAItG,IAGvDd,EAAQ+I,WAAWhG,GACnB/C,EAAQqG,KAAK,QAEb7I,KAAK6I,KAAK,SAGZ7I,KAAKkb,SAASxa,GAAG,WAAW,WAC1B8B,EAAQqG,KAAK,eAIjByQ,iBAxTyC,WAyTnCtZ,KAAKkb,WACPlb,KAAKkb,SAASpa,iBACPd,KAAKkb,WAIhBY,UA/TyC,WAgUvC9b,KAAK+b,QAAQ,SAGfC,WAnUyC,WAoUvChc,KAAK+b,QAAQ,UAGfE,aAvUyC,WAwUvCjc,KAAK+b,QAAQ,YAGfG,YA3UyC,WA4UvClc,KAAK+b,QAAQ,WAGfI,gBA/UyC,WAgVvCnc,KAAK+b,QAAQ,eAGfK,gBAnVyC,WAoVnCpc,KAAKmb,OAAO,QAAWnb,KAAKmU,UACzBnU,KAAKsU,SAGd+H,eAxVyC,WAyVvC,IACI/D,EADElK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEkd,iBAEpBtc,KAAK2Y,cAAgB3Y,KAAK2Y,aAC1BL,EAAUtY,KAAK2Y,aAAe3Y,KAAKR,QAAQ8Y,QAAU,EAErDlZ,EAAE6C,QAAQgZ,WAAW7M,EAAOkK,GAC5BlK,EAAM8C,aAAa,UAAWoH,GAE9BtY,KAAKuc,aAGPC,cAvWyC,WAwWvC,IACIjE,EADEnK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEqd,gBAEpBzc,KAAK4Y,WAAa5Y,KAAK4Y,UACvBL,EAAUvY,KAAK4Y,UAAY5Y,KAAKR,QAAQ+Y,QAAU,OAElDnK,EAAMjC,MAAMoM,QAAUA,EAEtBvY,KAAKuc,aAIPG,aAtXyC,WAuXnC1c,KAAK0Y,cAAiB1Y,KAAK2c,WACxB3c,KAAK4c,cAGdC,eA3XyC,WA4XvC,IAAI/B,EAAK9a,KAAKyY,SACRxQ,EAAKjI,KAAKiZ,aAEZjZ,KAAKmb,OAAO,SAAYnb,KAAKiU,QAAQ7U,EAAEyV,eAE5BzV,EAAE6C,QAAQ6a,kBAGzB9c,KAAKsC,iBAED2F,EAAMA,EAAGgN,YAAY6F,GAClBA,EAAGva,KAAK0U,YAAY6F,KAI7BiC,WA3YyC,WA4YvC,IAAIva,EAAUxC,KAAKyY,SACfnY,EAAMkC,EAAQjC,KACdoE,EAAMnC,EAAQjB,aAElB,GAAKvB,KAAKiU,QAAQ7U,EAAE8W,cAApB,CAGA,IAAI8G,EAAe,IAAIC,MAEvBD,EAAanX,GAAKmX,EAAanX,IAAM,cACrCmM,SAASqG,KAAK5Q,YAAYuV,GAE1BA,EAAaE,OAAS,WACpB,IAAIlX,EAASgX,EAAahX,OACtBD,EAAQiX,EAAajX,MACrBoX,EAAK7c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cia,EAAK9c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cka,EAAK/c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cma,EAAKhd,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAsBlD6Z,EAAaE,OAAS,WACpB9d,EAAE6C,QAAQ8O,OAAOiM,IAGf5D,QAAUA,OAAOmE,eAAe,cAClCC,UACIR,EAAanX,GACb,CAAC,EAAG,EAAGE,EAAO,EAAGA,EAAOC,EAAQ,EAAGA,GACnC,CAACmX,EAAGlZ,EAAGkZ,EAAGjZ,EAAGkZ,EAAGnZ,EAAGmZ,EAAGlZ,EAAGoZ,EAAGrZ,EAAGqZ,EAAGpZ,EAAGmZ,EAAGpZ,EAAGoZ,EAAGnZ,IAC9C,IAKR8Y,EAAa9X,IAAM1C,EAAQhD,QAAQie,mBAAqB9Y,EAAIO,MAG9DyX,SArcyC,WAsc/B3c,KAAK0Y,eAEF1Y,KAAKiU,QAAQ7U,EAAEse,eAE1B1d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASI,eACd7Y,KAAKuc,aAGPK,WA/cyC,YAgd/B5c,KAAK0Y,eAEH1Y,KAAKiU,QAAQ7U,EAAEse,eAEzB1d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASkF,cACd3d,KAAKuc,aAGPpI,QAzdyC,WA0dvC,IAAI2G,EAAK9a,KAAKyY,SACVnY,EAAMwa,EAAGva,KACP0H,EAAKjI,KAAKiZ,YAEXjZ,KAAKmb,OAAO,YACZlT,GAAOA,EAAG1F,YAAYuY,KAAS7S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eACvB,SAApBF,EAAGtb,QAAQmE,MAAoB3D,KAAK4d,QAAQ9C,EAAGtb,QAAQmE,MAIzD3D,KAAK4D,MAAQkX,EAAGtb,QAAQmE,MAHxB3D,KAAK4D,MAAQ,GACb5D,KAAKgb,cAAgB,IAIvBhb,KAAK+a,gBACL/a,KAAKob,kBACLpb,KAAKuc,aAGPjI,MA/eyC,WAgfvC,IAAMwG,EAAK9a,KAAKyY,SACVnY,EAAMwa,EAAGva,KACT0H,EAAKjI,KAAKiZ,YAEZjZ,KAAKmb,OAAO,YACXlT,GAAOA,EAAG1F,YAAYuY,KAAS7S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eAC/Chb,KAAK4D,MAAQ,OACb5D,KAAK+a,gBACL/a,KAAKsZ,mBACLtZ,KAAKuc,aAGPsB,UAhgByC,WAigBvC7d,KAAKyY,SAASrW,YAGhBiI,aApgByC,SAogB5BrJ,GACX,IAAMiH,EAAKjI,KAAKiZ,YAEXjZ,KAAKgb,iBAELhb,KAAKmb,OAAO,SAAYlT,GAAMA,EAAG9F,gBAEtCnC,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASza,SACvCrB,EAAE6C,QAAQ4N,SAASwJ,EAAO9X,aAAc,4BAI5C4I,aAlhByC,WAmhBvC,IAAM2Q,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAGXjZ,KAAKuZ,UAAYvZ,KAAK+Y,eAEtB/Y,KAAKgb,gBACNhb,KAAKmb,OAAO,SAAYlT,GAAMA,EAAG1F,YAAYuY,IAEjD9a,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASpa,UACvC1B,EAAE6C,QAAQ8R,YAAYsF,EAAO9X,aAAc,4BAI/CwZ,cAniByC,WAoiBvC,IACIza,EADON,KAAKyY,SACHlY,KACPoD,EAAO3D,KAAK8d,UAEd9d,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eAC/Chb,KAAKgb,cAAyB,KAATrX,EAAc,GAAK3D,KAAKuZ,SAAS5V,GAC3B,KAAvB3D,KAAKgb,eACP1a,EAAIuZ,SAAS7Z,KAAKgb,gBAItB3Y,YA/iByC,WAgjBvC,IAAIyY,EAAK9a,KAAKyY,SACRxQ,EAAKjI,KAAKiZ,YACZ3Y,EAAMwa,EAAGva,KAEPgF,EAAUuV,EAAGxV,aACfyY,GAAS,IAEb,GAAI9V,GAAMA,EAAG9F,eACX8F,EAAGzH,QAAQ6B,mBAIb,IAAIyY,EAAGtb,QAAQgW,kBAAmBxV,KAAKyK,QAAvC,CAEA,IAAK,IAAIzH,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAMuY,IACnBA,EAASxY,EAAQvC,GAAGwC,KAKxB,IAAIwY,EAAclD,EAAGvR,YACrByU,EAAYxY,IAAMuY,EAElB/d,KAAKyK,QAAUrL,EAAE0Q,iBAAiBmO,SAASD,EAAa,CACtD/K,QAASjT,KAAKgT,cACbpB,MAAMtR,EAAKwa,GACdA,EAAGjS,KAAK,qBAGV0T,SA9kByC,WA+kBnCvc,KAAKyK,SAAWzK,KAAKsC,iBACzBtC,KAAKqC,eAGPuI,kBAnlByC,WAolBvC,IAAMpI,EAAUxC,KAAKyY,SAEflT,EAAU/C,EAAQ8C,aACpBmF,EAAUzK,KAAKyK,QACfsT,GAAS,IAEb,GAAItT,GAAWA,aAAmBrL,EAAEsL,iBAAiBC,SAAU,CAC7D,IAAK,IAAI3H,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAMuY,IACnBA,EAASxY,EAAQvC,GAAGwC,KAKxB,IAAIwY,EAAcxb,EAAQ+G,YAC1ByU,EAAYxY,IAAMuY,EAEbvb,EAAQhD,QAAQgW,iBACnBxV,KAAKyK,QAAQyT,UAAUF,KAK7BJ,QA3mByC,SA2mBjCja,GACN,QAAS3D,KAAKwZ,OAAO7V,IAGvBma,QA/mByC,WAgnBvC,GAAK9d,KAAKgC,UACV,OAAOhC,KAAK4D,OAGd6X,SApnByC,WAqnBvC,OAAOzb,KAAKwZ,QAGd2B,OAxnByC,SAwnBlCxX,GACL,QAAK3D,KAAKgC,WACHhC,KAAK4D,QAAUD,GAGxBoY,QA7nByC,SA6nBjCoC,GACN,IAAMrD,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAGhB,GAFWjZ,KAAK8d,YAEHK,GAAYne,KAAK4d,QAAQO,IAAane,KAAKgC,UAaxD,OATIhC,KAAKyK,SAAWzK,KAAKyK,QAAQ2T,UAAUD,GACvCne,KAAKmb,OAAO,UAAYnb,KAAKkb,UAAYlb,KAAKob,kBAClDpb,KAAK4D,MAAQua,EACTne,KAAKmb,OAAO,SAAWnb,KAAKsZ,mBAChCtZ,KAAK+a,gBACL/a,KAAKuc,WAEDtU,GAAMA,EAAG1F,YAAYuY,IAAOA,EAAG1Y,WAE5BpC,MAOTmZ,SAtpByC,SAspBhCnY,GACP,IAAI2C,EAAO3D,KAAK8d,UACV7V,EAAKjI,KAAKiZ,YACZoF,EAAanW,OAAOC,KAAKnI,KAAKyb,YAC9BzF,EAAMqI,EAAW3E,QAAQ/V,GAEzBwa,EAAUE,GADCrI,EAAM,GAAKqI,EAAWxZ,QAGrC,GAAI7D,EAAG,CACL,GAAIiH,GAAMA,EAAG9F,eAAkB,OAC/B/C,EAAE8B,SAASod,KAAKtd,GAGlB,OAAOhB,KAAK+b,QAAQoC,MAIxB/e,EAAE0Q,iBAAiBhO,KAAO,SAACU,EAAShD,GAClC,OAAO,IAAIJ,EAAEsL,iBAAiB+H,KAAKjQ,EAAShD,K,eC3qB9CJ,EAAEqd,aAAerd,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK8W,WACP4F,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAYiQ,eAEtCF,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAYkQ,YAGxCnf,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAI5CvE,EAAEsL,iBAAiB8N,WAAWuG,EAAa,SAATpb,EAAkB,GAAK,gBAEzDvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BmC,WA8BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,eAAgB,gBACnD7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpDnd,EAAK0a,oB,eClCTpd,EAAEyV,aAAezV,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIif,EAFE3c,EAAOU,EAAQhC,QAOjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCgM,EAAUjc,EAAQhD,QAAQiP,YAAYyQ,YAEtC9f,EAAEsL,iBAAiB8N,WAAW2G,UACb,SAAfrd,EAAK8B,MAAmB,GAAK,mBAG/B6a,EAAUjc,EAAQhD,QAAQiP,YAAY2Q,aACtChgB,EAAEsL,iBAAiBiI,iBAAiBwM,UACnB,SAAfrd,EAAK8B,MAAmB,GAAK,iBAIjCpE,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAtBU,iBAuBVL,QAASA,EACT5M,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAjCmC,WAkCjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAK+a,iBAC7C/a,EAAK8S,mB,eCrChBxV,EAAEigB,cAAgBjgB,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAY6Q,aACrCzN,UAAW,WAGbzS,EAAEsL,iBAAiB8N,WAAW+G,EAAI,eAClCngB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdoC,WAevBlQ,KAAKyY,SAASjY,QACpByb,mB,eChBT7c,EAAEogB,WAAapgB,EAAEmf,WAAWhf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,OACNL,QAASjc,EAAQhD,QAAQiP,YAAYgR,UACrC5N,UAAW,QAGbzS,EAAEsL,iBAAiB8N,WAAWkH,EAAI,YAClCtgB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdiC,WAelBlQ,KAAKyY,SAASjY,QACtBsb,gB,eChBT1c,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEmf,WAAanf,EAAEugB,SAASC,OAAOrgB,OAAO,CACtCC,QAAS,CACPof,YAAa,CACXC,KAAK,EACLC,KAAM,GACNjN,UAAW,GACX4M,QAAS,KAIb3e,WAVsC,SAU3BQ,EAAKkC,EAAShD,GACvBQ,KAAKyY,SAAWjW,EAChBxC,KAAKO,KAAOD,EAEZlB,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEugB,SAASC,OAAO3f,UAAUH,WAAWI,KAAKF,KAAMR,GAElDQ,KAAK+R,kBAGP8N,YApBsC,SAoB1BpV,EAASuG,EAAW8O,GAAM,WAC9BC,EAAc/f,KAAKR,QAAQof,YAC3B/M,EAAYkO,EAAYlO,UACxB/P,EAAO9B,KAAKyY,SAASjY,QAE3BR,KAAKyK,QAAUA,EACfzK,KAAKggB,MAAQ5gB,EAAE6C,QAAQgP,OAAO,KAAM,GAAID,GACxChR,KAAKif,MAAQ7f,EAAE6C,QAAQgP,OAAO,IAAK,GAAIjR,KAAKggB,OAExCD,EAAYlB,IACd7e,KAAKif,MAAM5N,UAAYjS,EAAEkS,SAASL,OAAO8O,EAAYjB,MAErD9e,KAAKif,MAAM5N,UAAY0O,EAAYjB,KAGrC9e,KAAKif,MAAM/N,aAAa,OAAQ,KAChClR,KAAKif,MAAM/N,aAAa,QAAS6O,EAAYtB,SAC7Cze,KAAKif,MAAM/N,aAAa,OAAQ,UAEhC9R,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAOjf,KAAKigB,YAAYpK,WAE5ChE,IACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAOpN,GACb,aAAdA,GACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKggB,MAAOnO,GAE7BA,IAAc/P,EAAK8B,MACrBxE,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAO,iBAE/B7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAO,kBAItC7f,EAAE8B,SAASR,GAAGV,KAAKif,MAAO,QAASjf,KAAKS,OAAQT,MAChDZ,EAAE8B,SAASR,GAAGV,KAAKyY,SAAU,UAAU,WACrC,IAAM7B,EAAQ,EAAKqI,MAAM5N,UAAUuF,MAAM,yBACrCA,GAA0B,IAAjBA,EAAM/R,QAAgB,EAAKqb,mBAI1ClgB,KAAKmgB,eAAe1V,EAASzK,KAAKggB,MAAOF,IAG3C/N,eA/DsC,WAgEpC,IAAIC,SAASC,cAAc,YAA3B,CAIA,IAAIC,EAAKF,SAASoO,cAAc,OAChClO,EAAGrM,GAAK,UACRqM,EAAGhB,aAAa,SAAU,UAC1BgB,EAAGb,WAAY,IAAIjS,EAAEihB,gBAAiBhO,SAEtCL,SAASC,cAAc,wBAAwBxK,YAAYyK,KAG7DgO,cA5EsC,WA6EpC9gB,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAMqB,cAAe,YAChDlhB,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAO,aAGpCsB,eAjFsC,WAkFpCnhB,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAMqB,cAAe,YAC7ClhB,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAO,eAInC7f,EAAEohB,WAAa,SAASlgB,EAAKkC,EAAShD,GACpC,OAAO,IAAIJ,EAAEmf,WAAWje,EAAKkC,EAAShD,K,eC7FxCJ,EAAE8W,aAAe9W,EAAEmf,WAAWhf,OAAO,CAEnCO,WAFmC,SAExBQ,EAAKkC,EAAShD,GACvB,IACIif,EADE3c,EAAOU,EAAQhC,QAGrBR,KAAKygB,aAAc,EACnBzgB,KAAK0gB,gBAAiB,EACtB1gB,KAAK2gB,iBAAkB,EAEnB7e,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAWxX,EAAI,aAClCyd,EAAUjc,EAAQhD,QAAQiP,YAAYmS,cAEtCxhB,EAAEsL,iBAAiBiI,iBAAiB3R,EAAI,cACxCyd,EAAUjc,EAAQhD,QAAQiP,YAAYoS,eAGxCrhB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASA,GAGXrf,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BmC,WA6BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3B,GAAIsB,aAAgB1C,EAAEsL,iBAAiB+H,KACrC3Q,EAAKib,kBAKP,IAAI/c,KAAK2gB,gBAAT,CAGE3gB,KAAK2gB,iBAAkB,EAGzB,IAAMG,EAAa9gB,KAAKif,MAAMqB,cAE9BtgB,KAAK+gB,kBAAoB/gB,KAAKghB,iBAAiBpe,KAAK5C,MACpDA,KAAKihB,kBAAoBjhB,KAAKkhB,iBAAiBte,KAAK5C,MAEpDZ,EAAE8B,SAASR,GAAGogB,EAAY,SAAS,WACjC,GAAK9gB,KAAKygB,YAWH,CAEL,GAAIzgB,KAAK0gB,eACP,OAGF1gB,KAAKmhB,aACLnhB,KAAKohB,0BAA0BN,GAC/Bhf,EAAKoT,oBAlBLlV,KAAKygB,aAAc,EACnBzgB,KAAKqhB,mBAELC,WAAWthB,KAAKuhB,0BAA0B3e,KAAK5C,KAAM8gB,GAAa,KAClEhf,EAAKoR,cAAcwE,KACf,WACE1X,KAAKmhB,aACLnhB,KAAKohB,0BAA0BN,IAC/Ble,KAAK5C,SAYZA,QAGLmhB,WAzEmC,WA0EjCnhB,KAAKwhB,qBACLxhB,KAAKygB,aAAc,EACnBzgB,KAAK0gB,gBAAiB,GAGxBa,0BA/EmC,SA+ETE,GACxBA,EAAQC,iBAAiB,aAAc1hB,KAAK+gB,mBAC5CU,EAAQC,iBAAiB,aAAc1hB,KAAKihB,oBAG9CG,0BApFmC,SAoFTK,GACxBA,EAAQE,oBAAoB,aAAc3hB,KAAK+gB,mBAC/CU,EAAQE,oBAAoB,aAAc3hB,KAAKihB,oBAGjDD,iBAzFmC,WA0FjChhB,KAAK4hB,oBAGPV,iBA7FmC,WA8F5BlhB,KAAK0gB,eAGR1gB,KAAK0gB,gBAAiB,EAFtB1gB,KAAKqhB,oBAMTG,mBArGmC,WAsGjCpiB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,UAAW,WAC9C7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAM4C,WAAY,WAG/CR,iBA3GmC,WA4GjCjiB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,WACnC7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAEkS,SAASwQ,cAAc9hB,KAAKif,MAAO,WAGvC2C,iBAjHmC,WAkHjCxiB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,UACnC7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAM4C,WAAY,c,cCpHjDziB,EAAE2iB,iBAAmB3iB,EAAEmf,WAAWhf,OAAO,CACvCO,WADuC,SAC5BQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,cACNL,QAASjc,EAAQhD,QAAQiP,YAAYuT,gBACrCnQ,UAAW,cAGbzS,EAAEsL,iBAAiB8N,WAAWyJ,EAAI,kBAClC7iB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAduC,WAe1BlQ,KAAKyY,SAASjY,QACpB2b,sB,eChBT/c,EAAE8iB,gBAAkB9iB,EAAEmf,WAAWhf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IAAMsC,EAAOU,EAAQhC,SAErBhB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAY0T,eACrCtQ,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAfsC,WAgBpC,IAAI9B,EAAQpO,KAAKyY,SAASlX,aAE1B6gB,KAAKC,QAAQjU,EAAOhP,EAAEgjB,KAAKhU,Q,eClB/BhP,EAAEiV,WAAajV,EAAEmf,WAAWhf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,GACvB,IACIgf,EACAC,EAFE3c,EAAOU,EAAQhC,QAIjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAW8J,EAAI,UAClCljB,EAAEsL,iBAAiB8N,WAAW+J,EAAI,QAClC9D,EAAUjc,EAAQhD,QAAQiP,YAAY+T,SAEtChE,EAAM1c,EAAKqZ,OAAO,QAAU,OAAS,WAErC/b,EAAEsL,iBAAiBiI,iBAAiB4P,EAAI,aACxC9D,EAAUjc,EAAQhD,QAAQiP,YAAYgU,WACtCjE,EAAM,SAGRhf,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAW,QAGbzS,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BiC,WA8B/B,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAKsa,kBAC7Cta,EAAKsS,iB,eCjChBhV,EAAEsjB,gBAAkBtjB,EAAEmf,WAAWhf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK6W,cACP6F,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAYkU,kBAEtCnE,EAAM,YACNC,EAAUjc,EAAQhD,QAAQiP,YAAYmU,uBAGxCpjB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAG5CnE,EAAQqjB,WAAa,IAAIzjB,EAAEugB,SAAS,CAClC1M,QAAS,CAAC6P,EAAcC,KAK1B3jB,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAjCsC,eA4CxC,IAAI8S,EAAqB5jB,EAAEugB,SAASC,OAAOrgB,OAAO,CAChDO,WADgD,SACrCQ,EAAK2iB,GAId7jB,EAAEugB,SAASC,OAAO3f,UAAUH,WAAWI,KAAKF,OAE9CkQ,SAPgD,WAQ9ClQ,KAAKijB,SAASniB,aAIdgiB,EAAeE,EAAmBzjB,OAAO,CAC3CC,QAAS,CACPof,YAAa,CACXE,KAAM,iFACNL,QAAS,yBACT5M,UAAW,6DAGf3B,SAAU,WACRlQ,KAAKM,IAAI4iB,QAAQ,CAAC,SAAU,QAAU,IACtCF,EAAmB/iB,UAAUiQ,SAAShQ,KAAKF,SAI3C+iB,EAASC,EAAmBzjB,OAAO,CACrCC,QAAS,CACPof,YAAa,CACXE,KAAM,8BACNL,QAAS,c,eC1Efrf,EAAEkd,cAAgBld,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK6W,cACP6F,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAYkU,kBAEtCnE,EAAM,UACNC,EAAUjc,EAAQhD,QAAQiP,YAAYmU,uBAGxCpjB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAG5CvE,EAAEsL,iBAAiB8N,WAAW2K,EAAa,SAATxf,EAAkB,GAAK,iBAEzDvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BoC,WA6BlC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QACrB4iB,EAAOpjB,KAAKif,MAElB7f,EAAEkS,SAAS0N,YAAYoE,EAAM,UAAW,iBACxChkB,EAAEkS,SAASQ,YAAYsR,EAAM,yBAA0B,qBACvDthB,EAAKua,qB,eClCTjd,EAAEikB,cAAgBjkB,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAAImE,EAAOvE,EAAEe,MAAMgT,aAAa3Q,EAAS,UAAW,SAChDqI,EAASrI,EAAQqI,QAErBrL,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAY6U,aACrCzR,UAAWhH,GAAmB,SAATlH,EAAkB,GAAK,YAG9CvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAhBoC,WAiBlC,IAAM4K,EAAK9a,KAAKyY,SAEhBrZ,EAAE8B,SAASR,GAAGoa,EAAI,CAChBhZ,KAAM9B,KAAKkgB,cACXpS,QAAS9N,KAAKugB,gBACbvgB,MAEH8a,EAAGhN,c,eCxBP1O,EAAEmkB,aAAenkB,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASjc,EAAQhD,QAAQiP,YAAY+U,YACrC3R,UAAW,UAGbzS,EAAEsL,iBAAiB8N,WAAWiL,EAAI,cAClCrkB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdmC,WAepBlQ,KAAKyY,SAASjY,QACtB0b,kB,eChBT9c,EAAEskB,YAActkB,EAAEmf,WAAWhf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,QACNL,QAASjc,EAAQhD,QAAQiP,YAAYkV,WACrC9R,UAAW,SAGbzS,EAAEsL,iBAAiB8N,WAAWoL,EAAI,aAClCxkB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdkC,WAenBlQ,KAAKyY,SAASjY,QACtBwb,iB,eChBT5c,EAAEse,YAActe,EAAEmf,WAAWhf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,GACvB,IACIgf,EACAC,EAFE3c,EAAOU,EAAQhC,QAIjBsB,EAAK4W,eACP8F,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAYoV,eAEtCrF,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAYqV,cAGxCtkB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEsL,iBAAiB8N,WAAWlL,EAAmB,SAAfxL,EAAK8B,MAAmB,GAAK,WAC/DxE,EAAEsL,iBAAiB8N,WAAWuL,EAAmB,SAAfjiB,EAAK8B,MAAmB,GAAK,aAE/DxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BkC,WA6BhC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,gBAAiB,gBACpD7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,iBAAkB,iBACrDnd,EAAK4a,mB,eCjCTtd,EAAE8U,aAAe9U,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASjc,EAAQhD,QAAQiP,YAAYuV,cAGvC5kB,EAAEsL,iBAAiBiI,iBAAiB2P,EAAI,eACxCljB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAbmC,WActBlQ,KAAKyY,SAASjY,QACpBwT,mB,eCdT5U,EAAEgjB,KAAO,SAAqBzd,GAC5B,GAAiD,IAA7CuD,OAAOC,KAAKia,KAAK6B,WAAWtf,IAAME,OAAc,CAClDmS,QAAQC,IAAImL,KAAK6B,WAAWtf,IAC5B,IAAMuf,EAAM9B,KAAK6B,WAAWtf,QAKC,IAApBuf,EAAIC,kBACiB,IAArBD,EAAIE,eAKTF,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAEhBD,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GAEfF,EAAIG,eAGJH,EAAII,iBAUqB,MAA3BJ,EAAIK,oBAK8B,MAA3BL,EAAIK,oBAHVlZ,KAAKyB,GACLoX,EAAIM,gBAAgBC,UAAYP,EAAIM,gBAAgBE,aAOvD1N,QAAQC,IAAI,yBAGdD,QAAQC,IAAI,eAAgBiN,EAAIS,cAGR,IAApBT,EAAIS,aAGuB,IAApBT,EAAIS,aAGgB,IAApBT,EAAIS,cAJHtZ,KAAKyB,QAWY,IAApBoX,EAAIU,kBACmB,IAAvBV,EAAIW,qBAKkB,IAApBX,EAAIU,kBACmB,IAAvBV,EAAIW,iBAGTX,EAAIU,YAAYH,UAAYP,EAAIU,YAAYF,YAC5CR,EAAIW,qBAMV9N,MAAM,4D,cClFV3X,EAAE0lB,cAAgB1lB,EAAE2lB,WAAWxlB,OAAO,CACpCC,QAAS,CACPwlB,KAAM,UACNC,KAAM7lB,EAAE6lB,KAAK,CACXC,QAEE,iVACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZoC,WAapBrlB,KAAKslB,SAEXhb,UAAUtK,KAAKulB,QAASvlB,KAAKwlB,cAGvCC,aAlBoC,WAmBlCzlB,KAAKke,UAAUle,KAAKslB,SAASniB,UAAUnD,KAAKulB,aAIhDnmB,EAAE8a,cAAgB,SAAS1X,EAASwT,EAAKxW,GACvC,OAAO,IAAIJ,EAAE0lB,cAActiB,EAASwT,EAAKxW,K,eCxB3CJ,EAAEsmB,WAAatmB,EAAE2lB,WAAWxlB,OAAO,CACjCC,QAAS,CACPwlB,KAAM,OACNC,KAAM7lB,EAAE6lB,KAAK,CAEXC,QAAS,ykCACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAXiC,WAY/B,IAAI7iB,EAAUxC,KAAKslB,SACbK,EAAenjB,EAAQW,UAAUnD,KAAKulB,SACtCK,EAAY5lB,KAAKwlB,YAEvBhjB,EAAQkL,OAAOiY,EAAcC,IAG/BH,aAnBiC,WAoB/BzlB,KAAKke,UAAUle,KAAKslB,SAASniB,UAAUnD,KAAKulB,aAIhDnmB,EAAE0a,WAAa,SAAStX,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAEsmB,WAAWljB,EAASwT,EAAKxW,K,eCzBxCJ,EAAE2lB,WAAa3lB,EAAEymB,OAAOtmB,OAAO,CAC7BO,WAD6B,SAClB0C,EAAS+H,EAAQ/K,GAC1B,IAAMgL,EAAShI,EAAQW,UAAUoH,GAEjCnL,EAAEW,WAAWC,KAAMR,GAEnBQ,KAAKslB,SAAW9iB,EAChBxC,KAAKulB,QAAUhb,EAEf,IAAMub,EAAgB,CACpBrL,WAAW,EACXsL,aAAc,IAGZvmB,GAAWA,EAAQ+d,eAAe,eACpCuI,EAAcrL,UAAYjb,EAAQib,WAGpCrb,EAAEymB,OAAO5lB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQsb,IAGnDzlB,MArB6B,SAqBvBC,GACJlB,EAAEymB,OAAO5lB,UAAUI,MAAMH,KAAKF,KAAMM,GACpCN,KAAKgmB,iBACLhmB,KAAKylB,gBAGP5kB,SA3B6B,SA2BpBP,GACPN,KAAKimB,mBACL7mB,EAAEymB,OAAO5lB,UAAUY,SAASX,KAAKF,KAAMM,IAGzC4lB,mBAhC6B,WAiC3BlmB,KAAKslB,SAASzc,KAAK,cAGrBsd,iBApC6B,WAqC3BnmB,KAAKomB,aAGPA,UAxC6B,WAyC3BpmB,KAAKslB,SAASza,QAAS,EACvB7K,KAAKslB,SAASzc,KAAK,SAGrBmd,eA7C6B,WA8C3BhmB,KAAKU,GAAG,CACNgB,YAAatC,EAAE8B,SAASod,KACxBnd,UAAWnB,KAAKkmB,mBAChB7kB,KAAMrB,KAAKqlB,cACXgB,QAASrmB,KAAKmmB,kBACbnmB,MAEHA,KAAKslB,SAAS/kB,KAAKG,GAAG,UAAWV,KAAKylB,aAAczlB,MACpDA,KAAKslB,SAAS5kB,GAAG,SAAUV,KAAKylB,aAAczlB,OAGhDimB,iBAzD6B,WA0D3BjmB,KAAKe,IAAI,CACPW,YAAatC,EAAE8B,SAASod,KACxBnd,UAAWnB,KAAKkmB,mBAChB7kB,KAAMrB,KAAKqlB,cACXgB,QAASrmB,KAAKmmB,kBACbnmB,MAEHA,KAAKslB,SAAS/kB,KAAKQ,IAAI,UAAWf,KAAKylB,aAAczlB,MACrDA,KAAKslB,SAASvkB,IAAI,SAAUf,KAAKylB,aAAczlB,OAIjDsmB,wBAtE6B,SAsELC,EAASC,GAC/B,IAAMhkB,EAAUxC,KAAKslB,SACfhlB,EAAMkC,EAAQjC,KAEdkmB,EAAcnmB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmBmjB,GACrC3Y,EAAWtN,EAAI8C,mBAAmBojB,GAClCE,EAAsB1mB,KAAK2mB,IAAIF,EAAa9Y,GAC5CiZ,EAAmB5mB,KAAK2mB,IAAIF,EAAa7Y,GAE/C,OAAOvC,KAAKwb,KAAKD,EAAmBF,IAItCC,IApF6B,SAoFzB5C,EAAGhF,GACL,IAAM+H,EAAK/C,EAAE9f,EAAI8a,EAAE9a,EACb8iB,EAAKhD,EAAE7f,EAAI6a,EAAE7a,EAEnB,OAAOmH,KAAKC,IAAIwb,EAAI,GAAKzb,KAAKC,IAAIyb,EAAI,IAIxCC,oBA5F6B,SA4FTT,EAASC,GAC3B,IAAMhkB,EAAUxC,KAAKslB,SACfhlB,EAAMkC,EAAQjC,KAGdkmB,EAAcnmB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmBmjB,GACrC3Y,EAAWtN,EAAI8C,mBAAmBojB,GAElCS,EACJ5b,KAAK6b,MAAMT,EAAYviB,EAAIyJ,EAAYzJ,EAAGuiB,EAAYxiB,EAAI0J,EAAY1J,GAMxE,OAHEoH,KAAK6b,MAAMT,EAAYviB,EAAI0J,EAAS1J,EAAGuiB,EAAYxiB,EAAI2J,EAAS3J,GAGhDgjB,M,eC5GtB7nB,EAAE+nB,iBAAmB/nB,EAAE2lB,WAAWxlB,OAAO,CACvCC,QAAS,CACPwlB,KAAM,aACNC,KAAM7lB,EAAE6lB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZuC,WAarC,IAAM7iB,EAAUxC,KAAKslB,SACfhlB,EAAMkC,EAAQjC,KACdolB,EAAenjB,EAAQW,UAAUnD,KAAKulB,SACtCK,EAAY5lB,KAAKwlB,YACjB7Y,EAAQ3M,KAAKgnB,oBAAoBrB,EAAcC,GAC/C/Z,EAAQ7L,KAAKsmB,wBAAwBX,EAAcC,GAE3C,IAAVjZ,GAAenK,EAAQ6K,SAASV,EAAO,OAE3C,IAAIhG,EAAenE,EAAQmE,aACtBA,IAAgBA,EAAe,IAEpC,IAAMygB,EAAU9mB,EAAI+mB,uBAAuB7kB,EAAQW,UAAU,IACvDmkB,EAAUhnB,EAAI+mB,uBAAuB7kB,EAAQW,UAAU,IACvD+L,EAAI7D,KAAKkc,IAAIH,EAAQnjB,EAAIqjB,EAAQrjB,GACjCmL,EAAI/D,KAAKkc,IAAIH,EAAQljB,EAAIojB,EAAQpjB,GACtBmH,KAAKwb,KAAK3X,EAAIA,EAAIE,EAAIA,GACxBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAEhBrJ,EAAQoJ,QAAQ,IAIpB6Z,aArCuC,WAsCrCzlB,KAAKke,UAAUle,KAAKslB,SAASniB,UAAUnD,KAAKulB,aAIhDnmB,EAAEkb,iBAAmB,SAAC9X,EAASwT,EAAKxW,GAClC,OAAO,IAAIJ,EAAE+nB,iBAAiB3kB,EAASwT,EAAKxW,K,eC3C9CJ,EAAEooB,WAAapoB,EAAE2lB,WAAWxlB,OAAO,CACjCC,QAAS,CACPwlB,KAAM,OACNyC,aAAa,EACbxC,KAAM7lB,EAAE6lB,KAAK,CAEXC,QAAS,ycACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBvkB,SAZiC,SAYxBP,GACPN,KAAK0nB,gBACLtoB,EAAE2lB,WAAW9kB,UAAUY,SAASX,KAAKF,KAAMM,IAG7C0lB,eAjBiC,WAkB/B,IAAMf,EAAOjlB,KAAKuB,aAElBnC,EAAE2lB,WAAW9kB,UAAU+lB,eAAe9lB,KAAKF,MAE3CZ,EAAE8B,SAASR,GAAGukB,EAAM,CAClBzjB,UAAWxB,KAAK2nB,WAChBC,QAAS5nB,KAAK6nB,aACb7nB,MAEHZ,EAAE8B,SAASR,GAAGsR,SAAU,eAAgBhS,KAAK6nB,YAAa7nB,OAG5DimB,iBA9BiC,WA+B/B,IAAMhB,EAAOjlB,KAAKuB,aAElBnC,EAAE2lB,WAAW9kB,UAAU+lB,eAAe9lB,KAAKF,MAE3CZ,EAAE8B,SAASH,IAAIkkB,EAAM,CACnBzjB,UAAWxB,KAAK2nB,WAChBC,QAAS5nB,KAAK6nB,aACb7nB,MAEHZ,EAAE8B,SAASH,IAAIiR,SAAU,eAAgBhS,KAAK6nB,YAAa7nB,OAI7DqlB,cA5CiC,aA+CjCI,aA/CiC,WAgD/BzlB,KAAKke,UAAUle,KAAKslB,SAASniB,UAAUnD,KAAKulB,WAG9CoC,WAnDiC,SAmDtB3mB,GACT,IAAMiH,EAAKjI,KAAKslB,SAASrM,YACnBnX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAKslB,SAAS9kB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAKslB,SAASpb,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAKslB,WAA/D,CAIA,IAAMwC,EAAahmB,EAAKyY,aAExBva,KAAK+nB,OAASzG,WAAWliB,EAAEwD,MAAK,WAC1B5C,KAAKgoB,UAAYC,aAAajoB,KAAKgoB,UAElChoB,KAAKkoB,aAGRJ,EAAWjmB,WAAU,SAASwX,GACxBrZ,OAASqZ,GAAUA,EAAO8O,kBAHhCnoB,KAAKooB,YAAY,UAAW,CAACC,WAAW,IAO1CroB,KAAKsoB,gBACJtoB,MAAO,OAGZ6nB,YA7EiC,SA6ErB7mB,GACV,IAAMiH,EAAKjI,KAAKslB,SAASrM,YACnBnX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAKslB,SAAS9kB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAKslB,SAASpb,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAKslB,WAA/D,CAIA,IAAMwC,EAAahmB,EAAKyY,aAEpBvZ,EAAEunB,gBAAkBvW,UACtB8V,EAAWjmB,WAAU,SAASwX,GAC5BA,EAAO8O,kBAIPnoB,KAAK+nB,QAAUE,aAAajoB,KAAK+nB,QAErC/nB,KAAKgoB,SAAW1G,WAAWliB,EAAEwD,MAAK,WAChC5C,KAAKmoB,iBACJnoB,MAAO,SAIdZ,EAAEob,WAAa,SAAShY,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAEooB,WAAWhlB,EAASwT,EAAKxW,K,eCvGxCJ,EAAEopB,aAAeppB,EAAE2lB,WAAWxlB,OAAO,CACnCC,QAAS,CACPwlB,KAAM,SACNC,KAAM7lB,EAAE6lB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZmC,WAajC,IAAM7iB,EAAUxC,KAAKslB,SACfK,EAAenjB,EAAQW,UAAUnD,KAAKulB,SACtCK,EAAY5lB,KAAKwlB,YACjB7Y,EAAQ3M,KAAKgnB,oBAAoBrB,EAAcC,GAMrDpjB,EAAQ6K,SAASV,EAAO,QAG1B8Y,aAzBmC,WA0BjCzlB,KAAKke,UAAUle,KAAKslB,SAASniB,UAAUnD,KAAKulB,aAIhDnmB,EAAEgb,aAAe,SAAS5X,EAASwT,EAAKxW,GACtC,OAAO,IAAIJ,EAAEopB,aAAahmB,EAASwT,EAAKxW,K,eC/B1CJ,EAAEqpB,YAAcrpB,EAAE2lB,WAAWxlB,OAAO,CAClCC,QAAS,CACPwlB,KAAM,QACNC,KAAM7lB,EAAE6lB,KAAK,CACXC,QAEE,iiEACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZkC,WAahC,IAAI7iB,EAAUxC,KAAKslB,SACfhlB,EAAMkC,EAAQjC,KACdoG,EAAenE,EAAQmE,aACvBgf,EAAenjB,EAAQW,UAAUnD,KAAKulB,SACtCK,EAAY5lB,KAAKwlB,YACjB3Z,EAAQ7L,KAAKsmB,wBAAwBX,EAAcC,GAOlDjf,IAAgBA,EAAe,IACpC,IAAMygB,EAAU9mB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDmkB,EAAUhnB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACrD+L,EAAI7D,KAAKkc,IAAIH,EAAQnjB,EAAIqjB,EAAQrjB,GACjCmL,EAAI/D,KAAKkc,IAAIH,EAAQljB,EAAIojB,EAAQpjB,GACpBmH,KAAKwb,KAAK3X,EAAIA,EAAIE,EAAIA,GAExBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAMhBrJ,EAAQoJ,QAAQ,IAIpB6Z,aA3CkC,WA4ChCzlB,KAAKke,UAAUle,KAAKslB,SAASniB,UAAUnD,KAAKulB,aAIhDnmB,EAAE4a,YAAc,SAASxX,EAASwT,EAAKxW,GACrC,OAAO,IAAIJ,EAAEqpB,YAAYjmB,EAASwT,EAAKxW,K,eCjDzCJ,EAAE0Q,iBAAmB1Q,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBiI,iBAAmB,GAEtCvT,EAAEsL,iBAAiBge,WAAatpB,EAAEugB,SAASgJ,QAAQppB,OAAO,IAE1DH,EAAE0Q,iBAAiB2F,WAAa,SAASjW,GACvC,OAAO,IAAIJ,EAAEsL,iBAAiBge,WAAWlpB,IAI3CJ,EAAEC,sBAAsBsQ,aAAY,WAElC3P,KAAK4oB,QAAU,CACbxpB,EAAE8W,aACF9W,EAAEyV,aACFzV,EAAEiV,WACFjV,EAAE8U,cAIJ9U,EAAEC,sBAAsBoT,KAAKgH,MAAQ,CACnCoB,KAAMzb,EAAEiV,WACRwU,OAAQzpB,EAAE8U,cAGZ,IAAM6P,EAAI/jB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAK4oB,QAE7D5oB,KAAKQ,QAAUpB,EAAEmH,sBAAsBzE,KAAK9B,KAAM,CAACiT,QAAS8Q,Q,cC7B9D3kB,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEsL,iBAAiBC,SAAWvL,EAAEugB,SAASmJ,MAAMvpB,OAAO,CACpDC,QAAS,CACPupB,OAAQ,CAAC,GAAI,KAGfjpB,WALoD,SAKzC0K,EAAQhL,GACjBJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEugB,SAASmJ,MAAM7oB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQhL,IAG3D0Q,SAVoD,SAU3C5P,EAAKwa,GACZ9a,KAAKM,IAAMA,EACXN,KAAK8a,GAAKA,GAGZkO,MAfoD,WAgBlD,GAAIhpB,KAAKipB,IACP,OAAOjpB,KAAKipB,IAAIC,UAIpB9K,UArBoD,SAqB1C+K,GAER,IADA,IAAMH,EAAQhpB,KAAKgpB,QACVhmB,EAAI,EAAGA,EAAIgmB,EAAMnkB,OAAQ7B,IAAK,CACrC,IAAIomB,EAAOJ,EAAMjT,KAAK/S,GAAGkmB,SAAS,GAClC,GAAI9pB,EAAE6C,QAAQQ,SAAS2mB,EAAMD,GAE3B,OADAC,EAAKC,QACED,EAGX,OAAO,KAIXhqB,EAAE0Q,iBAAiBmO,SAAW,SAASzT,EAAQhL,GAC7C,OAAO,IAAIJ,EAAEsL,iBAAiBC,SAASH,EAAQhL,IAGjDJ,EAAEoH,wBAAwBmJ,aAAY,WAEpC3P,KAAK4oB,QAAU,CACbxpB,EAAEogB,WACFpgB,EAAEskB,YACFtkB,EAAEigB,cACFjgB,EAAEmkB,aACFnkB,EAAE2iB,iBACF3iB,EAAEiV,WACFjV,EAAEkd,cACFld,EAAEsjB,gBACFtjB,EAAEqd,aACFrd,EAAE8W,aACF9W,EAAEyV,cAIJzV,EAAEsL,iBAAiB+H,KAAKgH,MAAQ,CAC9BpY,KAAMjC,EAAEogB,WACR3T,MAAOzM,EAAEskB,YACThJ,QAAStb,EAAEigB,cACX1E,OAAQvb,EAAEmkB,aACV3I,WAAYxb,EAAE2iB,iBACdlH,KAAMzb,EAAEiV,YAGV,IAAM0P,EAAI/jB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAK4oB,QAE7D5oB,KAAKQ,QAAUpB,EAAE0Q,iBAAiBhO,KAAK9B,KAAM,CAACiT,QAAS8Q,Q,eCrEzD3kB,EAAEkqB,QAAUlqB,EAAEmqB,MAAMhqB,OAAO,CAEzBiqB,KAAM,2CAENC,SAAU,GAEVpX,OANyB,WAQvB,OADArS,KAAK0pB,WAAW1pB,KAAKypB,UACdzpB,KAAKwpB,MAGdE,WAXyB,SAWdC,GACT3pB,KAAKwpB,MAAQG,M,eCdjBvqB,EAAEgT,iBAAmBhT,EAAEkqB,QAAQ/pB,OAAO,CAEpCkqB,SAEI,8T,eCHNrqB,EAAEihB,eAAiBjhB,EAAEkqB,QAAQ/pB,OAAO,CAClCkqB,SACE,uqT,eCHJrqB,EAAEsQ,IAAIka,aAAa,CACjBC,cAAc,EACdC,SAAS,IAOX1qB,EAAEsQ,IAAIqa,aAAe3qB,EAAEsQ,IAAIsa,QAAQzqB,OAAO,CACxCO,WADwC,SAC7BQ,GACTN,KAAKO,KAAOD,EACZN,KAAKoQ,WAAa9P,EAAI8P,WACtBpQ,KAAKiqB,MAAQ3pB,EAAI4pB,OAAOC,YACxBnqB,KAAKoqB,mBAAqB,EAC1B9pB,EAAII,GAAG,SAAUV,KAAKqqB,SAAUrqB,OAGlCkQ,SATwC,WAUtC9Q,EAAE8B,SAASR,GAAGV,KAAKoQ,WAAY,YAAapQ,KAAKsqB,aAActqB,OAGjE8Q,YAbwC,WActC1R,EAAE8B,SAASH,IAAIf,KAAKoQ,WAAY,YAAapQ,KAAKsqB,aAActqB,OAGlEuqB,MAjBwC,WAkBtC,OAAOvqB,KAAKwqB,QAGdH,SArBwC,WAsBtCjrB,EAAE6C,QAAQ8O,OAAO/Q,KAAKiqB,cACfjqB,KAAKiqB,OAGdQ,YA1BwC,WA2BtCzqB,KAAKoqB,mBAAqB,EAC1BpqB,KAAKwqB,QAAS,GAGhBE,yBA/BwC,WAgCN,IAA5B1qB,KAAKoqB,qBACPnC,aAAajoB,KAAKoqB,oBAClBpqB,KAAKoqB,mBAAqB,IAI9BE,aAtCwC,SAsC3BtpB,GACX,IAAKA,EAAE8B,UAAyB,IAAZ9B,EAAE2pB,OAA4B,IAAb3pB,EAAEyQ,OACrC,OAAO,EAKTzR,KAAK0qB,2BACL1qB,KAAKyqB,cAELrrB,EAAE6C,QAAQ2oB,uBACVxrB,EAAE6C,QAAQ4oB,mBAEV7qB,KAAK8qB,YAAc9qB,KAAKO,KAAKwqB,2BAA2B/pB,GAExD5B,EAAE8B,SAASR,GAAGsR,SAAU,CACtBtQ,YAAatC,EAAE8B,SAASod,KACxB0M,UAAWhrB,KAAKirB,aAChBrD,QAAS5nB,KAAKkrB,YACblrB,OAGLirB,aA5DwC,SA4D3BjqB,GACNhB,KAAKwqB,SACRxqB,KAAKwqB,QAAS,EAEdxqB,KAAKmrB,KAAO/rB,EAAE6C,QAAQgP,OAAO,MAAO,mBAAoBjR,KAAKoQ,YAC7DhR,EAAE6C,QAAQ4N,SAAS7P,KAAKoQ,WAAY,qBAEpCpQ,KAAKO,KAAKsI,KAAK,iBAGjB7I,KAAKorB,OAASprB,KAAKO,KAAKwqB,2BAA2B/pB,GAEnDhB,KAAKqrB,QAAUjsB,EAAEksB,OAAOtrB,KAAK8qB,YAAa9qB,KAAKorB,QAC/C,IAAIG,EAAOvrB,KAAKqrB,QAAQG,UAExBpsB,EAAE6C,QAAQwpB,YAAYzrB,KAAKmrB,KAAMnrB,KAAKqrB,QAAQK,KAE9C1rB,KAAKmrB,KAAKhf,MAAMpG,MAAQwlB,EAAKtnB,EAAI,KACjCjE,KAAKmrB,KAAKhf,MAAMnG,OAASulB,EAAKrnB,EAAI,MAGpCynB,QAjFwC,WAkFlC3rB,KAAKwqB,SACPprB,EAAE6C,QAAQ8O,OAAO/Q,KAAKmrB,MACtB/rB,EAAE6C,QAAQ8R,YAAY/T,KAAKoQ,WAAY,sBAGzChR,EAAE6C,QAAQ2pB,sBACVxsB,EAAE6C,QAAQ4pB,kBAEVzsB,EAAE8B,SAASH,IAAIiR,SAAU,CACvBtQ,YAAatC,EAAE8B,SAASod,KACxB0M,UAAWhrB,KAAKirB,aAChBrD,QAAS5nB,KAAKkrB,YACblrB,OAGLkrB,WAjGwC,SAiG7BlqB,GACT,IAAgB,IAAZA,EAAE2pB,OAA4B,IAAb3pB,EAAEyQ,UAIvBzR,KAAK2rB,UAEA3rB,KAAKwqB,QAAV,CAIAxqB,KAAK0qB,2BACL1qB,KAAKoqB,mBAAqB9I,WACtBliB,EAAE6N,KAAKrK,KAAK5C,KAAKyqB,YAAazqB,MAAO,GAEzC,IAAIsrB,EAASlsB,EAAE4K,aACXhK,KAAKO,KAAKurB,uBAAuB9rB,KAAKqrB,QAAQU,iBAC9C/rB,KAAKO,KAAKurB,uBAAuB9rB,KAAKqrB,QAAQW,gBAG9CjhB,EAAO/K,KAAKO,KAAKuJ,UACjBT,EAASrJ,KAAKO,KAAKgJ,YAGvB+hB,EAAStrB,KAAKO,KAAKmU,8BAA8B4W,EAAQvgB,EAAM1B,GAE/DrJ,KAAKO,KAAKsI,KAAK,gBAAiB,CAAC2L,iBAAkB8W,QAIvDlsB,EAAEsQ,IAAIC,YAAY,aAAc,eAAgBvQ,EAAEsQ,IAAIqa,e,eCxItD3qB,EAAEsQ,IAAIka,aAAa,CACjBhhB,mBAAmB,IAOrBxJ,EAAEsQ,IAAIuc,kBAAoB7sB,EAAEsQ,IAAIwc,gBAAgB3sB,OAAO,CACrDkB,OADqD,WAEnD,IAAIH,EAAMN,KAAKO,KAEf,OAAIP,KAAKyT,WAGLnT,EAAIqI,gBAAgB3G,WACtB1B,EAAIqI,gBAAgB7H,UAGtBd,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAVuBlQ,MAc9Bc,QAlBqD,WAmBnD,OAAKd,KAAKyT,UAEVzT,KAAKyT,UAAW,EAChBzT,KAAK8Q,cAEE9Q,MALsBA,MAQ/BmsB,cA3BqD,SA2BvCnrB,GACZ,IAAIV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGPD,GAAMA,EAAG9Q,WAEbxC,EAAI8rB,UAAY,EAChBpsB,KAAKO,KAAK8rB,cAAgB/K,YAAW,WACd,IAAjBhhB,EAAI8rB,UACN9rB,EAAI8rB,SAAW,EACf9rB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQilB,OAAU1Y,GAAMA,EAAG2Y,mBAAmBC,kBAClDlsB,EAAIuI,KAAK,cAGZ,OAGL4jB,eAhDqD,WAiDnD,IAAInsB,EAAMN,KAAKO,KACXmsB,EAASpsB,EAAIqsB,QAEjBrL,YAAW,WACThhB,EAAI8rB,SAAW,EACfnE,aAAa3nB,EAAI+rB,iBAChB,GAEEK,IAE0B,IAA3BA,EAAOltB,QAAQ8Y,SACjBoU,EAAOltB,QAAQ8Y,QAAU,EACzBoU,EAAOzR,WAAW,KAElByR,EAAOltB,QAAQ8Y,QAAU,EACzBoU,EAAOzR,WAAW,QAKxB7b,EAAEsQ,IAAIC,YAAY,aAAc,oBAAqBvQ,EAAEsQ,IAAIuc,oB,eCxE3D7sB,EAAEsQ,IAAIwc,gBAAgBU,QAAQ,CAC5B1c,SAD4B,WAE1BlQ,KAAKO,KAAKG,GAAG,CACX2oB,MAAOrpB,KAAKmsB,cACZjT,SAAUlZ,KAAKysB,gBACdzsB,OAGL8Q,YAR4B,WAS1B9Q,KAAKO,KAAKQ,IAAI,CACZsoB,MAAOrpB,KAAKmsB,cACZjT,SAAUlZ,KAAKysB,gBACdzsB,OAGLS,OAf4B,WAgB1B,OAAIT,KAAKyT,UAGLzT,KAAKO,KAAKqI,mBACR5I,KAAKO,KAAKqI,kBAAkB5G,YAMlChC,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAbuBlQ,MAiB9Bc,QAjC4B,WAkC1B,OAAKd,KAAKyT,UAGVzT,KAAKO,KAAKsI,KAAK,kBAEf7I,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAPsBA,MAU/BmsB,cA5C4B,SA4CdnrB,GACZ,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGTD,GAAMA,EAAG9Q,WAEbxC,EAAI8rB,UAAY,EAChBpsB,KAAKO,KAAK8rB,cAAgB/K,YAAW,WACd,IAAjBhhB,EAAI8rB,UACN9rB,EAAI8rB,SAAW,EACf9rB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQilB,OAAU1Y,GAAMA,EAAG2Y,mBAAmBC,kBAIlDlsB,EAAIusB,cAAcjZ,EAAI,WAAY,CAACtT,MAGtC,OAGLmsB,eApE4B,SAoEbzrB,GACb,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAOb,GALAyN,YAAW,WACThhB,EAAI8rB,SAAW,EACfnE,aAAa3nB,EAAI+rB,iBAChB,IAEEzY,EAAM,OAAO,EAElB,IAAMkZ,EAAUxsB,EAAIwJ,UACdxG,EAAQhD,EAAId,QAAQutB,UACpBhiB,EAAO6I,EAAG9Q,SAAWgqB,EAAUxpB,EAAQwpB,EAAUxpB,EAEnB,WAAhChD,EAAId,QAAQmJ,gBACdrI,EAAI0sB,QAAQjiB,GAEZzK,EAAI2sB,cAAcjsB,EAAEksB,eAAgBniB,O,eC1F1C3L,EAAEsQ,IAAIkd,QAAQ,CAEZR,SAAU,EAEVe,gBAJY,SAII9W,GAiCd,OA9BAA,EAAOrW,KAAKotB,cAAgBhuB,EAAEG,OAAO,CACnC8tB,cAAe,GACfC,QAAS,GACTC,cAAe,GACfC,QAAS,EACTd,QAAQ,EACRe,aAAc,EACd7kB,mBAAmB,GAClByN,IAEOqW,SACR1sB,KAAKotB,cAAgBhuB,EAAEG,OAAOS,KAAKotB,cAAe,CAChDK,aAAcpX,EAAKqW,OAAS,OAAIrX,EAChCzM,oBAAmByN,EAAKqW,aAAgBrX,KAI5CrV,KAAK0tB,cAAgBtuB,EAAEuuB,UAnBX,oDAmB0B,CACpCL,QAASjX,EAAKiX,QACdC,cAAelX,EAAKkX,cACpBC,QAASnX,EAAKmX,QACdlV,QAASjC,EAAKgX,gBACbzb,MAAM5R,MAELqW,EAAKqW,OAAU1sB,KAAK4tB,WAAWvX,GAGjCrW,KAAK4I,uBAAoByM,EAGpBrV,MAGT4tB,WAxCY,SAwCDvX,GAsBT,OAnB0B,IAAtBA,EAAKoX,cAA4C,IAAtBpX,EAAKoX,eAClCpX,EAAKoX,aAAe,GAGtBztB,KAAK2sB,QAAUvtB,EAAEuuB,UANL,8EAMoB,CAC9BE,YAAa,0OACbC,WAAY,OACZrG,aAAa,EACbnP,QAASjC,EAAKoX,aACdH,QAASjX,EAAKiX,QACdC,cAAelX,EAAKkX,cACpBC,QAASnX,EAAKmX,QACdO,IAAK,QACJnc,MAAM5R,MAELA,KAAKotB,cAAcxkB,mBACrB5I,KAAK4I,kBAAkBnI,SAGlBT,QAKXZ,EAAEsQ,IAAIC,aAAY,WAChB3P,KAAK4I,kBAAkB9H,UACvBd,KAAK2I,gBAAgBlI,a,eCtEvBrB,EAAE6C,QAAU7C,EAAEG,OAAOH,EAAE6C,QAAS,CAC9B7B,gBAD8B,SACd4tB,GACdhuB,KAAKyO,YAAcuf,GAGrBxf,gBAL8B,SAKdyf,GACd,IAAMhgB,EAAO7O,EAAEiI,QAAQ6G,UAAY9O,EAAEiI,QAAQ6mB,SAAW9uB,EAAEiI,QAAQ8mB,KAS5DjiB,EAAS,CACb+hB,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjBA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjB,EAAG,EAAG,EAAG,EACTA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,IAGbG,EAAMngB,EAAO,YAAc/B,EAAOyC,KAAK,KAAO,IAAM,GAQ1D,OANKV,GACH+I,QACKC,IAAI,uFAIJmX,GAGTlsB,YAjC8B,SAiClBgQ,EAAIL,GACd,IAAM3O,EAAI2O,EACV,OAAO7R,KAAKyC,SAASyP,EAAIhP,GACvBlD,KAAK+T,YAAY7B,EAAIhP,GAAKlD,KAAK6P,SAASqC,EAAIhP,IAGhD4Z,cAvC8B,WAwC5B,OAAO1D,OAAOiV,QAAQruB,KAAKyO,YAAY6f,qBAGzCtZ,eA3C8B,SA2CfD,GACb,GAAU,IAANA,EAAW,OAAO/U,KAAK8c,gBAE3B,IACIyR,EADE9f,EAAczO,KAAKyO,YAAY+f,qBASrC,OALED,EADyB,mBAAhB9f,EACIA,EAAYsG,GAEZtG,EAGR2K,OAAOiV,QAAQE,O,cCvD1BnvB,EAAEkS,SAAW,CAMXL,OANW,SAMJwd,GAKL,MAJI,KAAKC,KAAKD,KACZA,EAAMA,EAAIE,QAAQ,KAAM,KAIxB,4BAA8BF,EAA9B,mDACuBA,EADvB,kBAMJ3M,cAlBW,SAkBG9Q,EAAW4d,GACvB,IAAM/P,EAAM7N,EAAUiB,cAAc,OAEhC4M,GACFzf,EAAE6C,QAAQ4N,SAASgP,EAAK+P,IAK5B5P,YA3BW,SA2BChO,EAAW6d,EAAMC,GACtB,KAAKJ,KAAKG,KACbA,EAAO,IAAMA,GAEV,KAAKH,KAAKI,KACbA,EAAO,IAAMA,GAGf,IAAMtQ,EAAMxN,EAAUiB,cAAc,OACpC,GAAIuM,EAAK,CACP,IAAMuQ,EAAUvQ,EAAIwQ,aAAa,gBAAkBH,EAAOC,EAAOD,EAEjE,OADArQ,EAAItN,aAAa,aAAc6d,GACxBA,EAET,OAAO,GAGTjd,YA5CW,SA4CCd,EAAWie,EAAQC,GAC7B,IAAMH,EAAU/d,EAAUge,aAAa,WAAaC,EAASC,EAASD,EAMtE,OAJAje,EAAUE,aAAa,QAAS6d,GAC5B/d,EAAUme,aAAa,eACzBne,EAAUE,aAAa,aAAc6d,GAEhCA,K,eCnDX3vB,EAAE+G,UAAY,CAEZC,cAFY,SAEE5D,GACZ,IAAIlC,EAAMkC,EAAQjC,KAMlB,OAAe,IAJJD,EACN8C,mBAAmBZ,EAAQW,UAAU,IACrCisB,WAAW9uB,EAAI8C,mBAAmBZ,EAAQW,UAAU,KAEnCX,EAAQjB,aAAawE,S,eCT/C3G,EAAEmQ,WAAa,CAGb8f,IAHa,SAGTpB,GACF,MAAO,CACLA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAK/DqB,OAZa,SAYNvL,EAAGhF,GACR,IACI/b,EADEE,EAAI,GAGV,IAAKF,EAAI,EAAGA,EAAI,EAAGA,IACjB,IAAK,IAAIiM,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAG1B,IAFA,IAAIsgB,EAAM,EAED9jB,EAAI,EAAGA,EAAI,EAAGA,IACrB8jB,GAAOxL,EAAE,EAAE/gB,EAAIyI,GAAGsT,EAAE,EAAEtT,EAAIwD,GAG5B/L,EAAE,EAAEF,EAAIiM,GAAKsgB,EAIjB,OAAOrsB,GAITssB,OAhCa,SAgCNvB,EAAGwB,GACR,MAAO,CACLxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAC/BxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAC/BxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,KAKnCC,OAzCa,SAyCN9L,EAAGqK,GAGR,IAFA,IAAM/hB,EAAS,GAENlJ,EAAI,EAAGuf,EAAI0L,EAAEppB,OAAQ7B,EAAIuf,EAAGvf,IACnCkJ,EAAOtG,KAAKge,EAAEqK,EAAEjrB,IAGlB,OAAOkJ,GAGTyjB,cAnDa,SAmDCC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACxC,IAAMlC,EAAI,CACR2B,EAAIE,EAAIE,EACRH,EAAIE,EAAIE,EACR,EAAG,EAAG,GAEJR,EAAIrwB,EAAEmQ,WAAWigB,OAAOpwB,EAAEmQ,WAAW8f,IAAIpB,GAAI,CAACiC,EAAIC,EAAI,IAE1D,OAAO/wB,EAAEmQ,WAAW+f,OAAOrB,EAAG,CAC5BwB,EAAE,GAAI,EAAG,EACT,EAAGA,EAAE,GAAI,EACT,EAAG,EAAGA,EAAE,MAIZnmB,QAlEa,SAkEL2kB,EAAGhqB,EAAGC,GACZ,IAAIurB,EAAIrwB,EAAEmQ,WAAWigB,OAAOvB,EAAG,CAAChqB,EAAGC,EAAG,IAEtC,MAAO,CAACurB,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,KAG5BjgB,oBAxEa,SAyET4gB,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,GAEjB,IAAIvN,EAAIxkB,EAAEmQ,WAAWogB,cAAcS,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClE1R,EAAIngB,EAAEmQ,WAAWogB,cAAcW,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClElD,EAAI7uB,EAAEmQ,WAAW+f,OAAO/P,EAAGngB,EAAEmQ,WAAW8f,IAAIzL,IAKhD,OAAOxkB,EAAEmQ,WAAWmgB,OAAO,EAAEzB,EAAE,GAAIA,M,eCrFvC7uB,EAAEwN,SAAW,CAEXC,UAFW,SAED5I,EAAGC,GAAiB,IAAd+H,EAAc,uDAAP,MACrB,MAAgB,QAATA,EACHjM,KAAKgN,iBAAiB3B,KAAK6b,MAAMhjB,EAAGD,IACpCoH,KAAK6b,MAAMhjB,EAAGD,IAGpB+I,iBARW,SAQML,GACf,OAAgB,IAARA,EAAetB,KAAKyB,IAG9BS,iBAZW,SAYMZ,GACf,OAAQA,EAAQtB,KAAKyB,GAAM,O,eCb/B1N,EAAEe,MAAQ,CACRC,gBADQ,WAEN,IAAMqO,EAAc,CAClByQ,YAAa,eACbE,aAAc,gBACdE,aAAc,gBACdG,UAAW,aACXmB,YAAa,eACbC,aAAc,gBACdnC,aAAc,gBACdC,UAAW,aACXqD,gBAAiB,oBACjBG,eAAgB,kBAChBK,SAAU,YACVC,WAAY,cACZE,gBAAiB,oBACjBC,qBAAsB,yBACtBU,aAAc,wBACdE,YAAa,eACbG,WAAY,cACZE,aAAc,iBACdC,YAAa,gBACbE,aAAc,gBACdsK,mBACE,qEACFE,qBACE,wEAGJ,GAAKxuB,KAAKR,QAAQiP,YAIhB,IAAK,IAAMkF,KAAOlF,EACXzO,KAAKR,QAAQiP,YAAY8O,eAAe5J,KAC3C3T,KAAKR,QAAQiP,YAAYkF,GAAOlF,EAAYkF,SALhD3T,KAAKR,QAAQiP,YAAcA,EAU7BrP,EAAE6C,QAAQ7B,gBAAgBJ,KAAKR,QAAQiP,cAGzC0E,aA3CQ,SA2CK6a,EAAKra,EAAKyd,GAErB,MADY,CAACzd,EAAKyd,GACP3sB,QAAO,SAASupB,EAAKviB,GAC9B,OAAOuiB,GAAOA,EAAIviB,KACjBuiB,OC7CPqD,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,O","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '
    ',\n tooltip: 'Go to the Eiffel Tower',\n className: 'leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range',\n },\n },\n addHooks: function() {\n this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar","Cancel","OpacitiesSubAction","myAction","setView","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.tooltip.style) { this._link.setAttribute('style', iconOptions.tooltip.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar1, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar1 = OpacitiesSubAction.extend({\n opacity: 1,\n options: {\n toolbarIcon: {\n html: () => this.opacity,\n tooltip: () => 'Opacity ' + this.opacity + '%',\n className: 'leaflet-toolbar-icon-vertical',\n style: () => 'background-color:#000; opacity:' + this.opacity/100,\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = OpacitiesSubAction.extend({\n opacity: 20,\n options: {\n toolbarIcon: {\n html: () => this.opacity,\n tooltip: () => 'Opacity ' + this.opacity + '%',\n className: 'leaflet-toolbar-icon-vertical',\n style: () => 'background-color:#000; opacity:' + this.opacity/100,\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = OpacitiesSubAction.extend({\n opacity: 40,\n options: {\n toolbarIcon: {\n html: () => this.opacity,\n tooltip: () => 'Opacity ' + this.opacity + '%',\n className: 'leaflet-toolbar-icon-vertical',\n style: () => 'background-color:#000; opacity:' + this.opacity/100,\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = OpacitiesSubAction.extend({\n opacity: 60,\n options: {\n toolbarIcon: {\n html: () => this.opacity,\n tooltip: () => 'Opacity ' + this.opacity + '%',\n className: 'leaflet-toolbar-icon-vertical',\n style: () => 'background-color:#000; opacity:' + this.opacity/100,\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = OpacitiesSubAction.extend({\n opacity: 80,\n options: {\n toolbarIcon: {\n html: () => this.opacity,\n tooltip: () => 'Opacity ' + this.opacity + '%',\n className: 'leaflet-toolbar-icon-vertical',\n style: () => 'background-color:#000; opacity:' + this.opacity/100,\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = OpacitiesSubAction.extend({\n opacity: 100,\n options: {\n toolbarIcon: {\n html: () => this.opacity,\n tooltip: () => 'Opacity ' + this.opacity + '%',\n className: 'leaflet-toolbar-icon-vertical',\n style: () => 'background-color:#000; opacity:' + this.opacity/100,\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar1","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/EditAction.js b/src/edit/actions/EditAction.js index bf61cba5a..d69ac0895 100644 --- a/src/edit/actions/EditAction.js +++ b/src/edit/actions/EditAction.js @@ -40,6 +40,7 @@ L.EditAction = L.Toolbar2.Action.extend({ this._link.setAttribute('href', '#'); this._link.setAttribute('title', iconOptions.tooltip); + if (iconOptions.tooltip.style) { this._link.setAttribute('style', iconOptions.tooltip.style); }; this._link.setAttribute('role', 'button'); L.DomUtil.addClass(this._link, this.constructor.baseClass); diff --git a/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index e68a5076a..2aca0ac2d 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -22,7 +22,7 @@ L.OpacitiesAction = L.EditAction.extend({ }; options.subToolbar = new L.Toolbar2({ - actions: [OpacitiesBar, Cancel], + actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar1, Cancel], }); // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; @@ -54,16 +54,98 @@ var OpacitiesSubAction = L.Toolbar2.Action.extend({ }, }); -var OpacitiesBar = OpacitiesSubAction.extend({ +var OpacitiesBar1 = OpacitiesSubAction.extend({ + opacity: 1, options: { toolbarIcon: { - html: '
    ', - tooltip: 'Go to the Eiffel Tower', - className: 'leaflet-toolbar-icon-vertical leaflet-toolbar-icon-range', + html: () => this.opacity, + tooltip: () => 'Opacity ' + this.opacity + '%', + className: 'leaflet-toolbar-icon-vertical', + style: () => 'background-color:#000; opacity:' + this.opacity/100, }, }, - addHooks: function() { - this.map.setView([48.85815, 2.29420], 19); + addHooks: () => { + // this.map.setView([48.85815, 2.29420], 19); + OpacitiesSubAction.prototype.addHooks.call(this); + }, +}); + +var OpacitiesBar20 = OpacitiesSubAction.extend({ + opacity: 20, + options: { + toolbarIcon: { + html: () => this.opacity, + tooltip: () => 'Opacity ' + this.opacity + '%', + className: 'leaflet-toolbar-icon-vertical', + style: () => 'background-color:#000; opacity:' + this.opacity/100, + }, + }, + addHooks: () => { + // this.map.setView([48.85815, 2.29420], 19); + OpacitiesSubAction.prototype.addHooks.call(this); + }, +}); + +var OpacitiesBar40 = OpacitiesSubAction.extend({ + opacity: 40, + options: { + toolbarIcon: { + html: () => this.opacity, + tooltip: () => 'Opacity ' + this.opacity + '%', + className: 'leaflet-toolbar-icon-vertical', + style: () => 'background-color:#000; opacity:' + this.opacity/100, + }, + }, + addHooks: () => { + // this.map.setView([48.85815, 2.29420], 19); + OpacitiesSubAction.prototype.addHooks.call(this); + }, +}); + +var OpacitiesBar60 = OpacitiesSubAction.extend({ + opacity: 60, + options: { + toolbarIcon: { + html: () => this.opacity, + tooltip: () => 'Opacity ' + this.opacity + '%', + className: 'leaflet-toolbar-icon-vertical', + style: () => 'background-color:#000; opacity:' + this.opacity/100, + }, + }, + addHooks: () => { + // this.map.setView([48.85815, 2.29420], 19); + OpacitiesSubAction.prototype.addHooks.call(this); + }, +}); + +var OpacitiesBar80 = OpacitiesSubAction.extend({ + opacity: 80, + options: { + toolbarIcon: { + html: () => this.opacity, + tooltip: () => 'Opacity ' + this.opacity + '%', + className: 'leaflet-toolbar-icon-vertical', + style: () => 'background-color:#000; opacity:' + this.opacity/100, + }, + }, + addHooks: () => { + // this.map.setView([48.85815, 2.29420], 19); + OpacitiesSubAction.prototype.addHooks.call(this); + }, +}); + +var OpacitiesBar100 = OpacitiesSubAction.extend({ + opacity: 100, + options: { + toolbarIcon: { + html: () => this.opacity, + tooltip: () => 'Opacity ' + this.opacity + '%', + className: 'leaflet-toolbar-icon-vertical', + style: () => 'background-color:#000; opacity:' + this.opacity/100, + }, + }, + addHooks: () => { + // this.map.setView([48.85815, 2.29420], 19); OpacitiesSubAction.prototype.addHooks.call(this); }, }); From 06e5ac5cc2b426c147aecff7ee9a58b5d85c9bbb Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 08:25:36 +0200 Subject: [PATCH 22/73] sub-menu test 11 --- dist/leaflet.distortableimage.css | 4 +-- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 46 ++++++++++++---------------- 4 files changed, 24 insertions(+), 30 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index eb1a18919..48b822482 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -222,8 +222,8 @@ a.leaflet-toolbar-icon[title='Loading...'] { } .leaflet-toolbar-icon-vertical { - background-color: rgba(255, 255, 255, 1); - border: inset 0.5px lightgray; + background-color: rgba(255, 255, 255, 1) !important; + border: inset 0.5px lightgray !important; float: none !important; margin: auto !important; } diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index f42273b3c..0a14d4665 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.tooltip.style&&this._link.setAttribute("style",n.tooltip.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=e.extend({opacity:1,options:{toolbarIcon:{html:function(){return t.opacity},tooltip:function(){return"Opacity "+t.opacity+"%"},className:"leaflet-toolbar-icon-vertical",style:function(){return"background-color:#000; opacity:"+t.opacity/100}}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=e.extend({opacity:20,options:{toolbarIcon:{html:function(){return t.opacity},tooltip:function(){return"Opacity "+t.opacity+"%"},className:"leaflet-toolbar-icon-vertical",style:function(){return"background-color:#000; opacity:"+t.opacity/100}}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=e.extend({opacity:40,options:{toolbarIcon:{html:function(){return t.opacity},tooltip:function(){return"Opacity "+t.opacity+"%"},className:"leaflet-toolbar-icon-vertical",style:function(){return"background-color:#000; opacity:"+t.opacity/100}}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=e.extend({opacity:60,options:{toolbarIcon:{html:function(){return t.opacity},tooltip:function(){return"Opacity "+t.opacity+"%"},className:"leaflet-toolbar-icon-vertical",style:function(){return"background-color:#000; opacity:"+t.opacity/100}}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=e.extend({opacity:80,options:{toolbarIcon:{html:function(){return t.opacity},tooltip:function(){return"Opacity "+t.opacity+"%"},className:"leaflet-toolbar-icon-vertical",style:function(){return"background-color:#000; opacity:"+t.opacity/100}}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=e.extend({opacity:100,options:{toolbarIcon:{html:function(){return t.opacity},tooltip:function(){return"Opacity "+t.opacity+"%"},className:"leaflet-toolbar-icon-vertical",style:function(){return"background-color:#000; opacity:"+t.opacity/100}}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=e.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.tooltip.style&&this._link.setAttribute("style",n.tooltip.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=e.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1"}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=e.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:20"}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=e.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4"}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=e.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6"}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=e.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8"}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=e.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1"}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=e.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 2cd7f2350..c14a6a8e7 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.tooltip.style) { this._link.setAttribute('style', iconOptions.tooltip.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar1, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar1 = OpacitiesSubAction.extend({\n opacity: 1,\n options: {\n toolbarIcon: {\n html: () => this.opacity,\n tooltip: () => 'Opacity ' + this.opacity + '%',\n className: 'leaflet-toolbar-icon-vertical',\n style: () => 'background-color:#000; opacity:' + this.opacity/100,\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = OpacitiesSubAction.extend({\n opacity: 20,\n options: {\n toolbarIcon: {\n html: () => this.opacity,\n tooltip: () => 'Opacity ' + this.opacity + '%',\n className: 'leaflet-toolbar-icon-vertical',\n style: () => 'background-color:#000; opacity:' + this.opacity/100,\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = OpacitiesSubAction.extend({\n opacity: 40,\n options: {\n toolbarIcon: {\n html: () => this.opacity,\n tooltip: () => 'Opacity ' + this.opacity + '%',\n className: 'leaflet-toolbar-icon-vertical',\n style: () => 'background-color:#000; opacity:' + this.opacity/100,\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = OpacitiesSubAction.extend({\n opacity: 60,\n options: {\n toolbarIcon: {\n html: () => this.opacity,\n tooltip: () => 'Opacity ' + this.opacity + '%',\n className: 'leaflet-toolbar-icon-vertical',\n style: () => 'background-color:#000; opacity:' + this.opacity/100,\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = OpacitiesSubAction.extend({\n opacity: 80,\n options: {\n toolbarIcon: {\n html: () => this.opacity,\n tooltip: () => 'Opacity ' + this.opacity + '%',\n className: 'leaflet-toolbar-icon-vertical',\n style: () => 'background-color:#000; opacity:' + this.opacity/100,\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = OpacitiesSubAction.extend({\n opacity: 100,\n options: {\n toolbarIcon: {\n html: () => this.opacity,\n tooltip: () => 'Opacity ' + this.opacity + '%',\n className: 'leaflet-toolbar-icon-vertical',\n style: () => 'background-color:#000; opacity:' + this.opacity/100,\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar1","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.tooltip.style) { this._link.setAttribute('style', iconOptions.tooltip.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar0 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:20',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 2aca0ac2d..d183d1bf5 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -22,7 +22,7 @@ L.OpacitiesAction = L.EditAction.extend({ }; options.subToolbar = new L.Toolbar2({ - actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar1, Cancel], + actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel], }); // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; @@ -54,14 +54,13 @@ var OpacitiesSubAction = L.Toolbar2.Action.extend({ }, }); -var OpacitiesBar1 = OpacitiesSubAction.extend({ - opacity: 1, +var OpacitiesBar0 = OpacitiesSubAction.extend({ options: { toolbarIcon: { - html: () => this.opacity, - tooltip: () => 'Opacity ' + this.opacity + '%', + html: 0, + tooltip: 'Opacity 20%', className: 'leaflet-toolbar-icon-vertical', - style: () => 'background-color:#000; opacity:' + this.opacity/100, + style: 'background-color:#000; opacity:0.1', }, }, addHooks: () => { @@ -71,13 +70,12 @@ var OpacitiesBar1 = OpacitiesSubAction.extend({ }); var OpacitiesBar20 = OpacitiesSubAction.extend({ - opacity: 20, options: { toolbarIcon: { - html: () => this.opacity, - tooltip: () => 'Opacity ' + this.opacity + '%', + html: 20, + tooltip: 'Opacity 20%', className: 'leaflet-toolbar-icon-vertical', - style: () => 'background-color:#000; opacity:' + this.opacity/100, + style: 'background-color:#000; opacity:20', }, }, addHooks: () => { @@ -87,13 +85,12 @@ var OpacitiesBar20 = OpacitiesSubAction.extend({ }); var OpacitiesBar40 = OpacitiesSubAction.extend({ - opacity: 40, options: { toolbarIcon: { - html: () => this.opacity, - tooltip: () => 'Opacity ' + this.opacity + '%', + html: 40, + tooltip: 'Opacity 40%', className: 'leaflet-toolbar-icon-vertical', - style: () => 'background-color:#000; opacity:' + this.opacity/100, + style: 'background-color:#000; opacity:0.4', }, }, addHooks: () => { @@ -103,13 +100,12 @@ var OpacitiesBar40 = OpacitiesSubAction.extend({ }); var OpacitiesBar60 = OpacitiesSubAction.extend({ - opacity: 60, options: { toolbarIcon: { - html: () => this.opacity, - tooltip: () => 'Opacity ' + this.opacity + '%', + html: 60, + tooltip: 'Opacity 60%', className: 'leaflet-toolbar-icon-vertical', - style: () => 'background-color:#000; opacity:' + this.opacity/100, + style: 'background-color:#000; opacity:0.6', }, }, addHooks: () => { @@ -119,13 +115,12 @@ var OpacitiesBar60 = OpacitiesSubAction.extend({ }); var OpacitiesBar80 = OpacitiesSubAction.extend({ - opacity: 80, options: { toolbarIcon: { - html: () => this.opacity, - tooltip: () => 'Opacity ' + this.opacity + '%', + html: 80, + tooltip: 'Opacity 80%', className: 'leaflet-toolbar-icon-vertical', - style: () => 'background-color:#000; opacity:' + this.opacity/100, + style: 'background-color:#000; opacity:0.8', }, }, addHooks: () => { @@ -135,13 +130,12 @@ var OpacitiesBar80 = OpacitiesSubAction.extend({ }); var OpacitiesBar100 = OpacitiesSubAction.extend({ - opacity: 100, options: { toolbarIcon: { - html: () => this.opacity, - tooltip: () => 'Opacity ' + this.opacity + '%', + html: 100, + tooltip: 'Opacity 100%', className: 'leaflet-toolbar-icon-vertical', - style: () => 'background-color:#000; opacity:' + this.opacity/100, + style: 'background-color:#000; opacity:1', }, }, addHooks: () => { From 0cc1c5bdac55d3e0a5c028f0f3a086f20ae800a6 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 08:31:03 +0200 Subject: [PATCH 23/73] sub-menu test 12 --- dist/leaflet.distortableimage.css | 12 +++++++++++- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 48b822482..c2ab53d06 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -222,10 +222,20 @@ a.leaflet-toolbar-icon[title='Loading...'] { } .leaflet-toolbar-icon-vertical { - background-color: rgba(255, 255, 255, 1) !important; + display: block !important; + width: 30px !important; + height: 30px !important; + line-height: 30px !important; + margin-right: 0 !important; + padding-right: 0 !important; + border-right: 0 !important; + text-align: center !important; + text-decoration: none !important; + background-color: fff !important; border: inset 0.5px lightgray !important; float: none !important; margin: auto !important; + } .leaflet-toolbar-1 { diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 0a14d4665..787cae683 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.tooltip.style&&this._link.setAttribute("style",n.tooltip.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=e.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1"}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=e.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:20"}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=e.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4"}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=e.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6"}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=e.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8"}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=e.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1"}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=e.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.tooltip.style&&this._link.setAttribute("style",n.tooltip.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=e.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1"}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=e.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:20"}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=e.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4"}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=e.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6"}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=e.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8"}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=e.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1"}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=e.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 c14a6a8e7..79a9453be 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.tooltip.style) { this._link.setAttribute('style', iconOptions.tooltip.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar0 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:20',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.tooltip.style) { this._link.setAttribute('style', iconOptions.tooltip.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar0 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:20',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index d183d1bf5..15bc2de83 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -58,7 +58,7 @@ var OpacitiesBar0 = OpacitiesSubAction.extend({ options: { toolbarIcon: { html: 0, - tooltip: 'Opacity 20%', + tooltip: 'Opacity 0%', className: 'leaflet-toolbar-icon-vertical', style: 'background-color:#000; opacity:0.1', }, From d87ae98c8306a30a13efdeeacc553d8629109680 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 08:37:27 +0200 Subject: [PATCH 24/73] sub-menu test 13 --- dist/leaflet.distortableimage.css | 6 +++--- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/EditAction.js | 2 +- src/edit/actions/OpacitiesAction.js | 2 ++ 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index c2ab53d06..a1fb32641 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -226,16 +226,16 @@ a.leaflet-toolbar-icon[title='Loading...'] { width: 30px !important; height: 30px !important; line-height: 30px !important; - margin-right: 0 !important; + /*margin-right: 0 !important;*/ padding-right: 0 !important; border-right: 0 !important; text-align: center !important; text-decoration: none !important; - background-color: fff !important; + background-color: #fff !important; border: inset 0.5px lightgray !important; + font-weight: bold !important; float: none !important; margin: auto !important; - } .leaflet-toolbar-1 { diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 787cae683..1ec582e8a 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.tooltip.style&&this._link.setAttribute("style",n.tooltip.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=e.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1"}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=e.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:20"}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=e.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4"}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=e.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6"}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=e.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8"}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=e.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1"}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=e.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=e.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1"}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=e.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:20"}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=e.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4"}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=e.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6"}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=e.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8"}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=e.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1"}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=e.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 79a9453be..db3040dd2 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.tooltip.style) { this._link.setAttribute('style', iconOptions.tooltip.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar0 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:20',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar0 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:20',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/EditAction.js b/src/edit/actions/EditAction.js index d69ac0895..e1aefb612 100644 --- a/src/edit/actions/EditAction.js +++ b/src/edit/actions/EditAction.js @@ -40,7 +40,7 @@ L.EditAction = L.Toolbar2.Action.extend({ this._link.setAttribute('href', '#'); this._link.setAttribute('title', iconOptions.tooltip); - if (iconOptions.tooltip.style) { this._link.setAttribute('style', iconOptions.tooltip.style); }; + if (iconOptions.style) { this._link.setAttribute('style', iconOptions.style); }; this._link.setAttribute('role', 'button'); L.DomUtil.addClass(this._link, this.constructor.baseClass); diff --git a/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 15bc2de83..b84a07cfe 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -149,6 +149,8 @@ var Cancel = OpacitiesSubAction.extend({ toolbarIcon: { html: '', tooltip: 'Cancel', + className: 'leaflet-toolbar-icon-vertical', + }, }, }); From 93c529b027e488c821b50298ecb8d4599efec4d7 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 08:44:49 +0200 Subject: [PATCH 25/73] sub-menu test 14 --- dist/leaflet.distortableimage.css | 2 +- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/EditAction.js | 1 + src/edit/actions/OpacitiesAction.js | 12 ++++++------ 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index a1fb32641..5fc534439 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -231,7 +231,7 @@ a.leaflet-toolbar-icon[title='Loading...'] { border-right: 0 !important; text-align: center !important; text-decoration: none !important; - background-color: #fff !important; + background-color: #fff; border: inset 0.5px lightgray !important; font-weight: bold !important; float: none !important; diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 1ec582e8a..160a70599 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=e.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1"}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=e.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:20"}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=e.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4"}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=e.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6"}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=e.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8"}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=e.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1"}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=e.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=e.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=e.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:20;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=e.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=e.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=e.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=e.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=e.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 db3040dd2..2db9f591f 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar0 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:20',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar0 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:20;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/EditAction.js b/src/edit/actions/EditAction.js index e1aefb612..e667047f8 100644 --- a/src/edit/actions/EditAction.js +++ b/src/edit/actions/EditAction.js @@ -40,6 +40,7 @@ L.EditAction = L.Toolbar2.Action.extend({ this._link.setAttribute('href', '#'); this._link.setAttribute('title', iconOptions.tooltip); + console.warn(JSON.stringify(iconOptions)); if (iconOptions.style) { this._link.setAttribute('style', iconOptions.style); }; this._link.setAttribute('role', 'button'); diff --git a/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index b84a07cfe..61e5de8a6 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -60,7 +60,7 @@ var OpacitiesBar0 = OpacitiesSubAction.extend({ html: 0, tooltip: 'Opacity 0%', className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:0.1', + style: 'background-color:#000; opacity:0.1;', }, }, addHooks: () => { @@ -75,7 +75,7 @@ var OpacitiesBar20 = OpacitiesSubAction.extend({ html: 20, tooltip: 'Opacity 20%', className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:20', + style: 'background-color:#000; opacity:20;', }, }, addHooks: () => { @@ -90,7 +90,7 @@ var OpacitiesBar40 = OpacitiesSubAction.extend({ html: 40, tooltip: 'Opacity 40%', className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:0.4', + style: 'background-color:#000; opacity:0.4;', }, }, addHooks: () => { @@ -105,7 +105,7 @@ var OpacitiesBar60 = OpacitiesSubAction.extend({ html: 60, tooltip: 'Opacity 60%', className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:0.6', + style: 'background-color:#000; opacity:0.6;', }, }, addHooks: () => { @@ -120,7 +120,7 @@ var OpacitiesBar80 = OpacitiesSubAction.extend({ html: 80, tooltip: 'Opacity 80%', className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:0.8', + style: 'background-color:#000; opacity:0.8;', }, }, addHooks: () => { @@ -135,7 +135,7 @@ var OpacitiesBar100 = OpacitiesSubAction.extend({ html: 100, tooltip: 'Opacity 100%', className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:1', + style: 'background-color:#000; opacity:1;', }, }, addHooks: () => { From dcf4b7f45a786e9d37732f119aff26532c02bd5e Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 08:52:47 +0200 Subject: [PATCH 26/73] sub-menu test 15 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 17 +++++++++-------- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 160a70599..a1beed978 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=e.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=e.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:20;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=e.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=e.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=e.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=e.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=e.extend({options:{toolbarIcon:{html:'',tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=L.EditAction.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=L.EditAction.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:20;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=L.EditAction.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=L.EditAction.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=L.EditAction.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=L.EditAction.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=L.EditAction.extend({options:{toolbarIcon:{html:"x",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 2db9f591f..42dd1f9aa 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar0 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:20;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = OpacitiesSubAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:20;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n /* html: '', */\n html: 'x',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 61e5de8a6..3d891e535 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -54,7 +54,7 @@ var OpacitiesSubAction = L.Toolbar2.Action.extend({ }, }); -var OpacitiesBar0 = OpacitiesSubAction.extend({ +var OpacitiesBar0 = L.EditAction.extend({ options: { toolbarIcon: { html: 0, @@ -69,7 +69,7 @@ var OpacitiesBar0 = OpacitiesSubAction.extend({ }, }); -var OpacitiesBar20 = OpacitiesSubAction.extend({ +var OpacitiesBar20 = L.EditAction.extend({ options: { toolbarIcon: { html: 20, @@ -84,7 +84,7 @@ var OpacitiesBar20 = OpacitiesSubAction.extend({ }, }); -var OpacitiesBar40 = OpacitiesSubAction.extend({ +var OpacitiesBar40 = L.EditAction.extend({ options: { toolbarIcon: { html: 40, @@ -99,7 +99,7 @@ var OpacitiesBar40 = OpacitiesSubAction.extend({ }, }); -var OpacitiesBar60 = OpacitiesSubAction.extend({ +var OpacitiesBar60 = L.EditAction.extend({ options: { toolbarIcon: { html: 60, @@ -114,7 +114,7 @@ var OpacitiesBar60 = OpacitiesSubAction.extend({ }, }); -var OpacitiesBar80 = OpacitiesSubAction.extend({ +var OpacitiesBar80 = L.EditAction.extend({ options: { toolbarIcon: { html: 80, @@ -129,7 +129,7 @@ var OpacitiesBar80 = OpacitiesSubAction.extend({ }, }); -var OpacitiesBar100 = OpacitiesSubAction.extend({ +var OpacitiesBar100 = L.EditAction.extend({ options: { toolbarIcon: { html: 100, @@ -144,10 +144,11 @@ var OpacitiesBar100 = OpacitiesSubAction.extend({ }, }); -var Cancel = OpacitiesSubAction.extend({ +var Cancel = L.EditAction.extend({ options: { toolbarIcon: { - html: '', + /* html: '', */ + html: 'x', tooltip: 'Cancel', className: 'leaflet-toolbar-icon-vertical', From 1a3b1ade5c26283d08261d81f39f9250fd7500e6 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 09:11:54 +0200 Subject: [PATCH 27/73] sub-menu test 16 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index a1beed978..96606cde6 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=L.EditAction.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=L.EditAction.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:20;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=L.EditAction.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=L.EditAction.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=L.EditAction.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=L.EditAction.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=L.EditAction.extend({options:{toolbarIcon:{html:"x",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"}}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=L.EditAction.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=L.EditAction.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=L.EditAction.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=L.EditAction.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=L.EditAction.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=L.EditAction.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=L.EditAction.extend({options:{toolbarIcon:{html:"x",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"}},addHooks:function(){t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 42dd1f9aa..1e10681c7 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:20;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n /* html: '', */\n html: 'x',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n\n },\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n /* html: '', */\n html: 'x',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n\n },\n },\n addHooks: () => {\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 3d891e535..c753cbeff 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -75,7 +75,7 @@ var OpacitiesBar20 = L.EditAction.extend({ html: 20, tooltip: 'Opacity 20%', className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:20;', + style: 'background-color:#000; opacity:0.2;', }, }, addHooks: () => { @@ -154,4 +154,7 @@ var Cancel = L.EditAction.extend({ }, }, + addHooks: () => { + this.disable(); + }, }); From 636a62304b6004f6a8773b45e5052f77b71731ac Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 09:19:34 +0200 Subject: [PATCH 28/73] sub-menu test 17 --- dist/leaflet.distortableimage.css | 3 ++- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 26 +++++++------------------- 4 files changed, 11 insertions(+), 22 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 5fc534439..578fa6d4a 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -226,7 +226,6 @@ a.leaflet-toolbar-icon[title='Loading...'] { width: 30px !important; height: 30px !important; line-height: 30px !important; - /*margin-right: 0 !important;*/ padding-right: 0 !important; border-right: 0 !important; text-align: center !important; @@ -240,7 +239,9 @@ a.leaflet-toolbar-icon[title='Loading...'] { .leaflet-toolbar-1 { border-radius: 0px 0px 4px 4px !important; + background-color: #fff !important; } + .leaflet-toolbar-icon-range { /*display: inline-block !important; writing-mode: bt-lr !important; diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 96606cde6..813addf7a 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=L.EditAction.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=L.EditAction.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=L.EditAction.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=L.EditAction.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=L.EditAction.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=L.EditAction.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=L.EditAction.extend({options:{toolbarIcon:{html:"x",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"}},addHooks:function(){t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=L.EditAction.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=L.EditAction.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=L.EditAction.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=L.EditAction.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=L.EditAction.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=L.EditAction.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=L.EditAction.extend({options:{toolbarIcon:{html:"x",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"}},addHooks:function(){t._overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 1e10681c7..0a940aa96 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n /* html: '', */\n html: 'x',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n\n },\n },\n addHooks: () => {\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n /* html: '', */\n html: 'x',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n\n },\n },\n addHooks: () => {\n this._overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index c753cbeff..54b0ce134 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -41,19 +41,6 @@ L.OpacitiesAction = L.EditAction.extend({ }, }); - -var OpacitiesSubAction = L.Toolbar2.Action.extend({ - initialize(map, myAction) { - map = map; - myAction = myAction; - - L.Toolbar2.Action.prototype.initialize.call(this); - }, - addHooks() { - this.myAction.disable(); - }, -}); - var OpacitiesBar0 = L.EditAction.extend({ options: { toolbarIcon: { @@ -65,7 +52,7 @@ var OpacitiesBar0 = L.EditAction.extend({ }, addHooks: () => { // this.map.setView([48.85815, 2.29420], 19); - OpacitiesSubAction.prototype.addHooks.call(this); + // OpacitiesSubAction.prototype.addHooks.call(this); }, }); @@ -80,7 +67,7 @@ var OpacitiesBar20 = L.EditAction.extend({ }, addHooks: () => { // this.map.setView([48.85815, 2.29420], 19); - OpacitiesSubAction.prototype.addHooks.call(this); + // OpacitiesSubAction.prototype.addHooks.call(this); }, }); @@ -95,7 +82,7 @@ var OpacitiesBar40 = L.EditAction.extend({ }, addHooks: () => { // this.map.setView([48.85815, 2.29420], 19); - OpacitiesSubAction.prototype.addHooks.call(this); + // OpacitiesSubAction.prototype.addHooks.call(this); }, }); @@ -110,7 +97,7 @@ var OpacitiesBar60 = L.EditAction.extend({ }, addHooks: () => { // this.map.setView([48.85815, 2.29420], 19); - OpacitiesSubAction.prototype.addHooks.call(this); + // OpacitiesSubAction.prototype.addHooks.call(this); }, }); @@ -125,7 +112,7 @@ var OpacitiesBar80 = L.EditAction.extend({ }, addHooks: () => { // this.map.setView([48.85815, 2.29420], 19); - OpacitiesSubAction.prototype.addHooks.call(this); + // OpacitiesSubAction.prototype.addHooks.call(this); }, }); @@ -140,7 +127,7 @@ var OpacitiesBar100 = L.EditAction.extend({ }, addHooks: () => { // this.map.setView([48.85815, 2.29420], 19); - OpacitiesSubAction.prototype.addHooks.call(this); + // OpacitiesSubAction.prototype.addHooks.call(this); }, }); @@ -155,6 +142,7 @@ var Cancel = L.EditAction.extend({ }, }, addHooks: () => { + this._overlay.disable(); this.disable(); }, }); From ea8a65c3cdb5018538590e230665bbd0e88a534c Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 09:31:05 +0200 Subject: [PATCH 29/73] sub-menu test 18 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 813addf7a..59201fdae 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.setOptions(this,c),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}});var e=L.Toolbar2.Action.extend({initialize:function(t,e){L.Toolbar2.Action.prototype.initialize.call(this)},addHooks:function(){this.myAction.disable()}}),i=L.EditAction.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),o=L.EditAction.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),n=L.EditAction.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),a=L.EditAction.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),s=L.EditAction.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),r=L.EditAction.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){e.prototype.addHooks.call(t)}}),l=L.EditAction.extend({options:{toolbarIcon:{html:"x",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"}},addHooks:function(){t._overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[s,a,n,o,i,e,r]}),L.EditAction.prototype.initialize.call(this,t,l,c)},addHooks:function(){}});var e=L.EditAction.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),r=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"}},addHooks:function(){console.warn("EXECUTAT"),t.overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 0a940aa96..b4ac35b1c 100644 --- a/dist/leaflet.distortableimage.js.map +++ b/dist/leaflet.distortableimage.js.map @@ -1 +1 @@ -{"version":3,"file":"leaflet.distortableimage.js","mappings":"kCAAAA,EAAEC,sBAAwBD,EAAEE,aAAaC,OAAO,CAC9CC,QAAS,CACPC,UAAU,EACVC,WAAY,CACVC,eAAgB,iCAChBC,UAAW,0BACXC,UAAW,kCAIfC,WAV8C,SAUnCN,GACTJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEE,aAAaW,UAAUH,WAAWI,KAAKF,KAAMR,GAC/CJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAKP,SAAWO,KAAKR,QAAQC,UAG/BY,MAlB8C,SAkBxCC,GACJlB,EAAEE,aAAaW,UAAUI,MAAMH,KAAKF,KAAMM,GAE1CN,KAAKO,KAAOD,EAERN,KAAKP,UAAYO,KAAKQ,QAAQC,SAMlCT,KAAKU,GAAG,WAAYV,KAAKW,WAAYX,MACrCA,KAAKU,GAAG,cAAeV,KAAKY,cAAeZ,OAG7Ca,SAjC8C,WAkCxCb,KAAKQ,SAAWR,KAAKQ,QAAQM,UAEjCd,KAAKe,IAAI,WAAYf,KAAKW,WAAYX,MACtCA,KAAKe,IAAI,cAAef,KAAKY,cAAeZ,OAG9CW,WAxC8C,SAwCnCK,GACT,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASR,GAAGO,EAAO,CACnBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASR,GAAGO,EAAMM,aAAc,CAChCC,UAAWxB,KAAKyB,gBAEhBC,YAAa1B,KAAK2B,uBACjB3B,OAGLY,cAvD8C,SAuDhCI,GACZ,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASH,IAAIE,EAAO,CACpBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASH,IAAIE,EAAMM,aAAc,CACjCC,UAAWxB,KAAKyB,gBAChBC,YAAa1B,KAAK2B,uBACjB3B,OAGL2B,sBArE8C,SAqExBX,GAAG,WAClBhB,KAAKP,WAEVuB,EAAEY,iBAEF5B,KAAK6B,WAAU,SAACZ,GACd,IAAMa,EAAOb,EAAMT,QACfS,EAAMM,eAAiBP,EAAEe,QAAUD,EAAKE,YAC1C5C,EAAE6C,QAAQC,YAAYjB,EAAMM,aAAc,aACtC,EAAKY,gBACPlB,EAAMmB,WACN,EAAK5B,QAAQ6B,eAEb,EAAK7B,QAAQ8B,uBAMrBC,YAxF8C,SAwFlCC,GACV,OAAOpD,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAGlDY,aA5F8C,WA8F5C,OADiBnC,KAAK0C,YACNC,KAAK3C,KAAKuC,YAAYK,KAAK5C,QAG7C6C,iBAjG8C,SAiG7B7B,EAAGC,GACdD,EAAE8B,UAEA7B,EAAMT,QAAQwB,WAChB5C,EAAE6C,QAAQC,YAAYlB,EAAEe,OAAQ,aAIhC/B,KAAKmC,eAAkBlB,EAAMmB,WAC1BpC,KAAKQ,QAAQ8B,kBAGtBb,gBA7G8C,SA6G9BT,GAAG,WACZhB,KAAKP,WAEVO,KAAK6B,WAAU,SAACZ,GACVA,EAAMM,eAAiBP,EAAEe,OAC3Bd,EAAMmB,WAEN,EAAKS,iBAAiB7B,EAAGC,MAIzBD,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCI,mBA3H8C,SA2H3BJ,GACjB,IAEIgC,EAFER,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAGZP,KAAKuC,YAAYC,IAEtBxC,KAAK6B,WAAU,SAACZ,GAGd,IAFAA,EAAMgC,iBAAmB,GACzBhC,EAAMmB,WACDY,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACtB,IAAIE,EAAIjC,EAAMkC,UAAUH,GACxB/B,EAAMgC,iBAAiBD,GAAK1C,EAAI8C,mBAAmBF,QAKzD5B,cA5I8C,SA4IhCN,GACZ,IAAMwB,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAEjB,GAAKP,KAAKuC,YAAYC,GAAtB,CAEA,IAAMa,EAAU/C,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDG,EAAQd,EAAQS,iBAAiB,GAAGM,SAASF,GAEnDrD,KAAKwD,4BAA4BF,EAAOd,KAG1CiB,UAxJ8C,WAwJlC,WAGV,OAFiBzD,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAQ,EAAKrB,YAAYtB,IAAmB,SAAT0C,MAIvCE,QAjK8C,SAiKtCrB,GAAS,WAGf,OAFiBxC,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAO3C,IAAUuB,GAAW,EAAKD,YAAYtB,IAAmB,SAAT0C,MAI3DH,4BA1K8C,SA0KlBF,EAAOd,GACjC,IAEIQ,EAFEc,EAAe9D,KAAK6D,QAAQrB,GAC5BuB,EAAI,IAAI3E,EAAE4E,eAAe,GAAIV,EAAMW,EAAG,GAAIX,EAAMY,GAGtDJ,EAAaK,SAAQ,SAAClD,GACpB,IAAImD,EAAc,GAClB,IAAKpB,EAAI,EAAGA,EAAI,EAAGA,IACjBoB,EAAYpB,GAAKe,EAAEM,UAAUpD,EAAMgC,iBAAiBD,IAEtD/B,EAAMqD,qBAAqBF,OAI/BG,kBAxL8C,SAwL5BC,GAIhB,OAHeA,EAAKC,QAAO,SAASC,EAAKC,GACvC,OAAOD,EAAMC,EAAIC,eAChB,GACaJ,EAAKK,QAGvBC,mBA/L8C,WAgM5C,IAAMC,EAAO,CACbA,OAAc,IA4Bd,OA1BA/E,KAAK6B,WAAU,SAASZ,GACtB,GAAIjB,KAAKuC,YAAYtB,GAAQ,CAC3B,IAAI+D,EAAW/D,EAAMgE,OAAOC,IAAIC,MAAM,KAClCC,EAAWJ,EAASA,EAASH,OAAO,GACpCQ,EAAKpE,EAAMqE,aACXC,EAAU,CACZ,CAACC,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,MAE9BX,EAAKY,OAAOC,KAAK,CACfC,GAAI7F,KAAK8F,WAAW7E,GACpBiE,IAAKjE,EAAMgE,OAAOC,IAClBa,MAAO9E,EAAMgE,OAAOc,MACpBC,OAAQ/E,EAAMgE,OAAOe,OACrBC,gBAAiBb,EACjBc,MAAOX,EACPX,aAAcxF,EAAE+G,UAAUC,cAAcnF,QAG3CjB,MAEH+E,EAAKY,OAASZ,EAAKY,OAAOU,UAC1BtB,EAAKuB,iBAAmBtG,KAAKuE,kBAAkBQ,EAAKY,QAE7CZ,KAIX3F,EAAEmH,sBAAwB,SAASV,EAAIrG,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBwG,EAAIrG,K,eClOzCJ,EAAEoH,wBAA0BpH,EAAEqH,aAAalH,OAAO,CAEhDC,QAAS,CACPwG,OAAQ,IACRU,aAAa,EAEbC,aAAc,GACdlH,UAAU,EACVkE,KAAM,UACNiD,UAAU,GAGZ9G,WAZgD,SAYrC+G,EAAKrH,GACdJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAK2G,aAAe3G,KAAKR,QAAQmH,aACjC3G,KAAKP,SAAWO,KAAKR,QAAQC,SAC7BO,KAAK8G,UAAY9G,KAAKR,QAAQoH,SAC9B5G,KAAK+G,KAAOF,EACZ7G,KAAKgH,SAAW,IAGlB3G,MAvBgD,SAuB1CC,GAAK,WACTN,KAAKO,KAAOD,EACPN,KAAKuB,cAAgBvB,KAAKiH,aAE/B3G,EAAII,GAAG,YAAaV,KAAKkH,OAAQlH,MAE7BA,KAAKR,QAAQ+F,UACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QACzBjF,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAYV,KAAKuH,aAAcvH,OAK1CZ,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAAQ,WAIvC,GAHA,EAAKiG,UAAUC,YAAY,EAAKlG,cAChC,EAAKmG,uBAED,EAAKlI,QAAQwH,SAAU,CACzB,IAAMW,EAAQ,EAAKnI,QAAQwH,SAASY,IAAM,MAAQ,MAClD,EAAKC,SAAS,EAAKrI,QAAQwH,SAASW,GAAQA,QAE5C,EAAKX,SAAW,CAACY,IAAK,EAAGE,IAAK,GAC9B,EAAKZ,SAIF,EAAKC,UACJ7G,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAY,EAAK6G,aAAc,GAK1C,IAAMQ,EAAe,EAAKC,cACtBD,GACF,EAAKE,GAAKF,EAAaG,OAAOC,KAAKJ,GAAc,IAC7C,EAAKE,GAAGxI,UAAY,EAAKe,QAAQC,WAEjC,EAAKhB,UAAY,EAAKe,QAAQC,SAClC,EAAKwH,GAAK,SAId7I,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACvDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MAMGM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAG7CA,KAAK6I,KAAK,QAGZhI,SArFgD,SAqFvCP,GACPlB,EAAE8B,SAASH,IAAIf,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACxDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MACHZ,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAExCA,KAAKQ,SAAWR,KAAKQ,QAAQM,UACjCd,KAAK6I,KAAK,UAEVzJ,EAAEqH,aAAaxG,UAAUY,SAASX,KAAKF,KAAMM,IAG/CoH,qBApGgD,WAqG9C,IAAMpH,EAAMN,KAAKO,KACXuI,EAAqB1J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,SAC3DyH,EAAsB5J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,UAC5D0H,EACFC,SAASJ,GAAsBI,SAASF,GACtCG,EAAcnJ,KAAKR,QAAQwG,OAC3BoD,EAAaF,SAASD,EAAcE,GACpCE,EAAS/I,EAAIgJ,QAAQhJ,EAAIiJ,aACzBC,EAASpK,EAAEqK,MAAML,EAAYD,GAAaO,SAAS,GACrD1J,KAAKR,QAAQ+F,QACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QAE7BvF,KAAKmH,SAAW,CACd7G,EAAIqJ,UAAUN,EAAO9F,SAASiG,IAC9BlJ,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIJ,KAI7BxJ,KAAK6J,mBAAqB,CACxB,OAAUR,EACV,OAAUG,EACV,KAAQlJ,EAAIwJ,WAGd9J,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,gBAGrCoD,aAlIgD,SAkInC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKoC,YAIvCkG,sBAvIgD,WAwI9C,IAAMhI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAC5CZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKoC,SAAUpC,OAGnDwI,qBA7IgD,WA8I9C,IAAMlI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAC3CZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKoC,SAAUpC,OAGpDkK,WAnJgD,WAoJ9C,OAAOlK,KAAK8G,WAGd1E,SAvJgD,WAwJ9C,IAAMN,EAAO9B,KAAKQ,QAClB,GAAKsB,EAAKE,UAOV,OALAF,EAAKQ,iBACLR,EAAKqI,eAELnK,KAAK8G,WAAY,EACjB9G,KAAK6I,KAAK,YACH7I,MAGToI,OAnKgD,SAmKzCpH,GACL,IAAMc,EAAO9B,KAAKQ,QACZyH,EAAKjI,KAAKiI,GAEhB,GAAKnG,EAAKE,UAAV,CAYA,GAXIhB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,GAGpChB,KAAKoK,wBAELpK,KAAK8G,WAAY,EACjBhF,EAAKO,cACLP,EAAKuI,eACLrK,KAAK6I,KAAK,WAGNZ,IAAMA,EAAG9F,eAKb,OAAOnC,KAJLA,KAAKoC,aAOTgI,sBA3LgD,WA4L9CpK,KAAKO,KAAKsB,WAAU,SAACZ,GACfA,aAAiB7B,EAAEoH,yBACrBvF,EAAMmB,eAKZkI,UAnMgD,SAmMtCC,EAAQC,GAChB,IAAM1I,EAAO9B,KAAKQ,QAalB,OAXAR,KAAKmH,SAASoD,GAAUC,EAExBxK,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT8K,sBApNgD,SAoN1BC,EAAMR,EAAQjK,GAClC,OAAIA,EAAId,QAAQwL,IAAIC,QAAU7L,EAAE8L,IAAID,SAKrB,IAATF,GACFI,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI,EACrCkH,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,GAAK,MAEzCiH,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI6G,EAAO,EAC5CK,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,EAAImH,KAAKC,IAAI,EAAGP,IAAS,KAEvDI,GAAcC,GATtB,IAAID,EACAC,GAYRG,WArOgD,SAqOrCC,GACT,IAAMlL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAGR,IAAK,IAAIyI,KAAKD,EACZ,GAAIxL,KAAK8K,sBAAsBC,EAAMS,EAAUC,GAAInL,GAIjD,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAI4C,KAAKD,EACZxL,KAAKmH,SAASnE,GAAKwI,EAAUC,GAC7BzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGTsE,qBAtQgD,SAsQ3BoH,GACnB,IAAMpL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAER,IAAK,IAAIyI,KAAKC,EAAW,CACvB,IAAMnB,EAASjK,EAAIqL,mBAAmBD,EAAUD,IAEhD,GAAIzL,KAAK8K,sBAAsBC,EAAMR,EAAQjK,GAI3C,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAI4C,KAAKC,EACZ1L,KAAKmH,SAASnE,GAAK1C,EAAIqL,mBAAmBD,EAAUD,IACpDzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT4L,QAxSgD,SAwSxCC,GACN,IAEI7I,EACAe,EAHEzD,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAG5BuC,EAAgB,GAEpB,GAAc,IAAVD,EAAJ,CAEA,IAAK7I,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EACCgJ,QAAQtJ,KAAKmD,UAAUH,IACvBO,SAAS8F,GACT0C,WAAWF,GACXjC,IAAIP,GACTyC,EAAc9I,GAAK1C,EAAIqJ,UAAU5F,GAKnC,OAFA/D,KAAKuL,WAAWO,GAET9L,OAGTgM,SA/TgD,WA+TzB,IAAdC,EAAc,uDAAP,MACRC,EAASlM,KAAKuB,aAAa4K,MAAM/M,EAAE6C,QAAQmK,WAC5CjH,MAAM,YAAY,GAClBkH,MAAM,GAAI,GACVlH,MAAM,KAELmH,EAAQJ,EAAO,GACfK,EAAQL,EAAO,GACfM,EAAQN,EAAO,GACfO,EAAQP,EAAO,GAEfQ,EAAcJ,EAAQG,EAAQF,EAAQC,EAExCG,EAAQvN,EAAEwN,SAASC,UAAUP,EAAOC,EAAO,OAU/C,OARIG,EAAc,IAChBC,GAASA,EAAQ,EAAItB,KAAKyB,IAAMzB,KAAKyB,IAGnCH,EAAQ,IACVA,EAAQ,EAAItB,KAAKyB,GAAKH,GAGR,QAATV,EACHZ,KAAK0B,MAAM3N,EAAEwN,SAASI,iBAAiBL,IACvCvN,EAAE6N,KAAKC,UAAUP,EAAO,IAG9B9E,SA3VgD,SA2VvC8E,GAAqB,IAAdV,EAAc,uDAAP,MACfkB,EAAenN,KAAKgM,SAASC,GAC7BmB,EAAkBT,EAAQQ,EAGhC,OAFAnN,KAAKqN,SAASD,EAAiBnB,GAExBjM,MAGTqN,SAnWgD,SAmWvCV,GAAqB,IAIxB3J,EACAe,EACAuJ,EANUrB,EAAc,uDAAP,MACf3L,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAC5BhE,EAAU,GASd,IAJa,QAAT0G,IACFU,EAAQvN,EAAEwN,SAASW,iBAAiBZ,IAGjC3J,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAAS8F,GAC5CiE,EAAIlO,EAAEqK,MACF4B,KAAKmC,IAAIb,GAAS5I,EAAEE,EAAIoH,KAAKoC,IAAId,GAAS5I,EAAEG,EAC5CmH,KAAKoC,IAAId,GAAS5I,EAAEE,EAAIoH,KAAKmC,IAAIb,GAAS5I,EAAEG,GAEhDqB,EAAQvC,GAAK1C,EAAIqJ,UAAU2D,EAAE1D,IAAIP,IAKnC,OAFArJ,KAAKuL,WAAWhG,GAETvF,MAGT0N,OA7XgD,SA6XzCC,EAAaC,GAClB,IACI5K,EACAe,EAFEzD,EAAMN,KAAKO,KAGbsN,EAAe,GACbvK,EAAQhD,EAAIgJ,QAAQqE,GAAapK,SAASjD,EAAIgJ,QAAQsE,IAE5D,IAAK5K,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAASD,GAC5CuK,EAAa7K,GAAK1C,EAAIqJ,UAAU5F,GAGlC/D,KAAKuL,WAAWsC,IAGlBC,QA5YgD,WAwZ9C,IAXA,IAAMxN,EAAMN,KAAKO,KACX8I,EAASrJ,KAAK6J,mBAAmBR,OACjCG,EAASxJ,KAAK6J,mBAAmBL,OACjCuB,EAAO/K,KAAK6J,mBAAmBkB,KAC/BxF,EAAU,CACd8D,EAAO9F,SAASiG,GAChBH,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,IACrCmF,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,IACrCmF,EAAOO,IAAIJ,IAGJxG,EAAI,EAAGA,EAAI,EAAGA,IAChB1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,GAAMgD,OAAO/N,KAAKmD,UAAUH,KACzDhD,KAAKsK,UAAUtH,EAAG1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,IAOhD,OAHA/K,KAAK6K,QAAS,EACd7K,KAAK6I,KAAK,WAEH7I,MAKTgO,oBAtagD,SAsa5BvE,GAOlB,IAAMwE,EAAO7O,EAAEiI,QAAQ6G,SAEjBC,GAASF,EAAO,KAAO,IAAM,IAEnC,MAHa,aAAeA,EAAO,KAAO,IAAM,IAGlCxE,EAAMxF,EAAI,MAAQwF,EAAMvF,EAAI,KAAOiK,GAGnDjH,OApbgD,WAqb9C,IAAM5G,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACb6B,EAAqBhE,EAAEwD,KAAKtC,EAAI8C,mBAAoB9C,GACpD+N,EAAkBrO,KACnBsO,8BAA8BlL,GAC7BC,EAAUD,EAAmBpD,KAAKmD,UAAU,IAC5CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,KAK5DP,EAAMjC,MAAM/M,EAAE6C,QAAQmK,UAAY,WAAa,QAE/CpM,KAAKgH,SAASY,IAAM5H,KAAKgM,WACzBhM,KAAKgH,SAASc,IAAM9H,KAAKgM,SAAS,QASpCzE,aAldgD,SAkdnCqH,GACX,IAAMtO,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACbsN,EAAwB,SAASrE,GACrC,OAAOlK,EAAIwO,uBAAuBtE,EAAQoE,EAAM7D,KAAM6D,EAAMvF,SAExDgF,EAAkBrO,KAAKsO,8BACzBO,GAEExL,EAAUwL,EAAsB7O,KAAKmD,UAAU,IAC/CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,MAG9DrJ,WAregD,WAse9C,OAAOtF,KAAKmH,UAGdhE,UAzegD,SAyetCH,GACR,OAAOhD,KAAKmH,SAASnE,IAIvBuG,UA9egD,WA+e9C,IAAMjJ,EAAMN,KAAKO,KACXkE,EAASzE,KAAKsF,aAAab,QAAO,SAASsK,EAAKxE,GACpD,OAAOwE,EAAInF,IAAItJ,EAAIgJ,QAAQiB,MAC1BnL,EAAEqK,MAAM,EAAG,IACd,OAAOnJ,EAAIqJ,UAAUlF,EAAOiF,SAAS,KAGvC4E,8BAtfgD,SAsflBU,GAI5B,IAIIC,EAJEzF,EAASwF,EAAkBhP,KAAKmD,UAAU,IAC1C+L,EAAIlP,KAAKuB,aAAa4N,aAAe,IACrCC,EAAIpP,KAAKuB,aAAa8N,cAAgB,IACxCnM,EAAI,GAGR,IAAK+L,EAAI,EAAGA,EAAI,EAAGA,IACjB/L,EAAE0C,KAAKoJ,EAAkBhP,KAAKmD,UAAU8L,IAAIK,UAAU9F,IAcxD,OAAOpK,EAAEmQ,WAAWC,oBAChB,EAAG,EAAGtM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAG,EAAGhM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnB,EAAGkL,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAGE,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,MAK3B9E,EAAEqQ,wBAA0B,SAAS5J,EAAIrG,GACvC,OAAO,IAAIJ,EAAEoH,wBAAwBX,EAAIrG,IAG3CJ,EAAEsQ,IAAIC,aAAY,WACXvQ,EAAE6C,QAAQQ,SAASzC,KAAK4P,eAAgB,QAC3CxQ,EAAE6C,QAAQ4N,SAAS7P,KAAK4P,eAAgB,W,0BC9hB5CxQ,EAAE6C,QAAU7C,EAAE6C,SAAW,GACzB7C,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBqF,UAAY3Q,EAAE4Q,QAAQzQ,OAAO,CAE9CC,QAAS,CACPyQ,SAAU,YAGZnQ,WAN8C,SAMnCQ,EAAKd,GACdQ,KAAKO,KAAOD,EACZlB,EAAEW,WAAWC,KAAMR,IAGrB0Q,SAX8C,WAYvClQ,KAAKmQ,aACRnQ,KAAKoQ,WAAapQ,KAAKqQ,kBACvBrQ,KAAKsQ,eAAiBtQ,KAAKuQ,QAC3BvQ,KAAKwQ,SAAWxQ,KAAKyQ,gBACrBzQ,KAAK0Q,WAAW1Q,KAAKoQ,WAAYpQ,KAAKsQ,eAAgBtQ,KAAKwQ,UAE3DpR,EAAE8B,SAASR,GAAGV,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE7DZ,EAAE8B,SAAS0P,wBAAwB5Q,KAAKoQ,YACxChR,EAAE8B,SAAS2P,yBAAyB7Q,KAAKoQ,cAI7CU,YAzB8C,WA0BxC9Q,KAAKmQ,aACP/Q,EAAE8B,SAASH,IAAIf,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE9DZ,EAAE6C,QAAQ8O,OAAO/Q,KAAKwQ,UACtBpR,EAAE6C,QAAQ8O,OAAO/Q,KAAKsQ,gBACtBlR,EAAE6C,QAAQ8O,OAAO/Q,KAAKoQ,YACtBpQ,KAAKmQ,YAAa,IAItBE,gBApC8C,WAqC5C,IAAMW,EAAY5R,EAAE6C,QAAQgP,OAAO,MAAO,sBAC1CD,EAAUE,aAAa,KAAM,iBAE7B,IAAMC,EAAU/R,EAAE6C,QAAQgP,OAAO,KAAM,WAGvC,OAFAD,EAAUvJ,YAAY0J,GAEfH,GAGTP,cA9C8C,WA+C5C,IAAMW,EAAUhS,EAAE6C,QAAQgP,OAAO,IAAK,IAUtC,OATAG,EAAQC,UAAYjS,EAAEkS,SAASL,OAAO,iBAEtCG,EAAQF,aAAa,KAAM,oBAC3BE,EAAQF,aAAa,OAAQ,KAC7BE,EAAQF,aAAa,QAAS,eAE9BE,EAAQF,aAAa,OAAQ,UAC7BE,EAAQF,aAAa,aAAc,eAE5BE,GAGTb,MA5D8C,WA6D5C,IAAMgB,EAAOnS,EAAE6C,QAAQgP,OAAO,MAAO,IAIrC,OAHAM,EAAKL,aAAa,KAAM,qBACxBK,EAAKpF,MAAMqF,QAAU,OAEdD,GAGTb,WApE8C,SAoEnCM,EAAWO,EAAME,GAC1BzR,KAAKmQ,WAAa/Q,EAAEsS,QAAQ,CAACzB,SAAUjQ,KAAKR,QAAQyQ,WAEpDjQ,KAAKmQ,WAAW9P,MAAQ,WAuBtB,OAtBA2Q,EAAUvJ,YAAY8J,GACtBA,EAAKI,mBACD,YACA,k3CAkBJX,EAAUvJ,YAAYgK,GACfT,GAGThR,KAAKmQ,WAAWyB,MAAM5R,KAAKO,OAG7BoQ,iBApG8C,SAoG7B3P,GACfA,EAAEY,iBAEF5B,KAAKoQ,WAAWyB,UACgB,kCAA9B7R,KAAKoQ,WAAWyB,UACd,qCACA,gCAGJ7R,KAAKsQ,eAAenE,MAAMqF,QACc,SAAtCxR,KAAKsQ,eAAenE,MAAMqF,QAAqB,QAAU,OAG3DxR,KAAKwQ,SAASa,UACgB,UAA5BrR,KAAKwQ,SAASa,UACZjS,EAAEkS,SAASL,OAAO,iBAClB,QAGJ7R,EAAEkS,SAASQ,YAAY9R,KAAKwQ,SAAU,cAAe,eACrDpR,EAAE6C,QAAQC,YAAYlC,KAAKwQ,SAAU,eAGvCuB,eA3H8C,WA4H5C,IAAIC,SAASC,cAAc,sBAA3B,CAEA,IAAMC,EAAK9S,EAAE6C,QAAQgP,OAAO,MAAO,IACnCiB,EAAGrM,GAAK,oBACRqM,EAAGhB,aAAa,SAAU,UAE1BlR,KAAKmS,UAAW,IAAI/S,EAAEgT,kBAAmBC,SACzCH,EAAGb,UAAYrR,KAAKmS,SAEpBH,SAASC,cAAc,8BAA8BxK,YAAYyK,OAIrE9S,EAAEsL,iBAAiBqF,UAAUJ,aAAY,WACvCvQ,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACrClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACvClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GAAK,EAC5C,EAGgD,IAA9ClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,IAAalT,EAAEiI,QAAQkL,SAChE,EAAK9R,SACL,EAAKsR,qBAIT3S,EAAE0Q,iBAAiB0C,UAAY,SAAClS,EAAKd,GACnC,OAAO,IAAIJ,EAAEsL,iBAAiBqF,UAAUzP,EAAKd,K,eC3J/CJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEC,sBAAsBoT,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CAC9CC,QAAS,CACPkT,OAAQtT,EAAE0Q,iBAAiB6C,kBAG7B7S,WAL8C,SAKnC8S,EAAOpT,GAChBQ,KAAK6S,OAASD,EACd5S,KAAK8S,YAAcF,EAAMpT,QAAQE,WAEjCN,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB6C,iBAAiBI,OAAS,iBAG/C7C,SAd8C,WAe5C,IACM5P,EADQN,KAAK6S,OACDtS,KAElBP,KAAKgT,YAAchT,KAAKR,QAAQyT,QAChCjT,KAAKkT,YACD9T,EAAEwD,KAAKxD,EAAEe,MAAMgT,aAAanT,KAAM,cAAe,aACjDA,KAAKoT,YAAapT,MAEtBZ,EAAE8B,SAASR,GAAGsR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE9CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAGlDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQC,aAG/CqQ,YAxC8C,WAyC5C,IACMxQ,EADQN,KAAK6S,OACDtS,KAElBnB,EAAE8B,SAASH,IAAIiR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE/CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MAGnDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAKsT,gBACLtT,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQM,cAG/CL,OA9D8C,WAiE5C,OAFAT,KAAKyT,UAAW,EAChBzT,KAAKkQ,WACElQ,MAGTc,QApE8C,WAuE5C,OAFAd,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAGTqT,WA1E8C,SA0EnCrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KAExB3T,KAAK0T,IAEN1T,KAAK6S,OAAO1Q,gBACdnC,KAAK0T,GAAaxT,KAAKF,OAI3B0I,aArF8C,SAqFjC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKsT,cAActS,IAIrDsH,sBA1F8C,WA2F5C,IAAMhI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MACjDZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKsT,cAAetT,OAGxDwI,qBAhG8C,WAiG5C,IAAMlI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAChDZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKsT,cAAetT,OAGzDsT,cAtG8C,SAsGhCtS,GACZ,IAAI4S,EAEA5S,IAAK4S,EAAK5S,EAAE6S,eAKZD,IAAOA,EAAG9Q,UAAY8Q,EAAG7R,kBAAkB+R,oBAI/C9T,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB7B,EAAE6C,QAAQ8R,YAAY9S,EAAMM,aAAc,aAC1CN,EAAMmB,cAGRpC,KAAKsC,iBAEDtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCgT,aA5H8C,WA4H/B,WACRhU,KAAKiU,QAAQ7U,EAAE8U,eAEpBlU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd2T,UAELlT,EAAMmB,gBAKZgS,WAzI8C,WAyIjC,WACNpU,KAAKiU,QAAQ7U,EAAEiV,aAEpBrU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd8T,QAELlV,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CiS,gBAtJ8C,SAsJ9BxS,GAAG,WACXuT,EAAMvT,EAAEwT,iBACRlU,EAAMN,KAAK6S,OAAOtS,KAExBP,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB,IAAMa,EAAOb,EAAMT,QAEfS,EAAMiJ,cAAgBjJ,EAAMmB,WAEhC,IAAM2I,EAAOzK,EAAIwJ,UACXT,EAAS/I,EAAIiJ,YACfkL,EAAYrV,EAAE4K,aAAa/I,EAAMkC,UAAU,GAAIlC,EAAMkC,UAAU,IAEnEsR,EAAYnU,EAAIoU,8BAA8BD,EAAW1J,EAAM1B,GAC3DkL,EAAII,WAAWF,IAAc3S,EAAKE,YAC/B,EAAKyI,SAAW,EAAKpI,cAC1BjD,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CqT,aA3K8C,SA2KjC5T,GAAG,WACd,GAAKhB,KAAKiU,QAAQ7U,EAAEyV,cAApB,CAEA,IAAMC,EAAiB9U,KAAK6S,OAAOpP,YAC7BsR,EAAID,EAAejQ,OAEf,IAANkQ,IAEW3V,EAAE6C,QAAQ+S,eAAeD,KAGtCD,EAAe3Q,SAAQ,SAAClD,GACtB,EAAK4R,OAAOoC,YAAYhU,MAErBjB,KAAK6S,OAAO1Q,gBACfnC,KAAKsC,kBAILtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,MAGtCkU,aAjM8C,WAkMvClV,KAAKmV,mBACRnV,KAAK8S,YAAYsC,gBAAaC,GAGhCC,cAActV,KAAKuV,iBAGrBlT,YAzM8C,WA0M5C,IAAMuQ,EAAQ5S,KAAK6S,OACbvS,EAAMsS,EAAMrS,KAEdqS,EAAMpT,QAAQgW,iBAAmBxV,KAAKyK,UAE1CzK,KAAKyK,QAAUrL,EAAE0Q,iBAAiB2F,WAAW,CAC3CxC,QAASjT,KAAKgT,YACd/C,SAAU,YACT2B,MAAMtR,EAAKsS,KAGhBtQ,eArN8C,WAsN5C,IAAMhC,EAAMN,KAAK6S,OAAOtS,KACxB,IAAIP,KAAKyK,QAIP,OAAO,EAHPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,GAMnBwJ,QA/N8C,SA+NtCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDE,QAnO8C,SAmOtCF,GAMN,MALwB,yBAApBA,EAAMG,WAAyC7V,KAAKiU,QAAQyB,KAC9D1V,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,eAEArC,MAGT8V,WA5O8C,SA4OnCJ,GAAO,WAWhB,OAVA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,OAAI,EAAKhD,YAAYgD,KAASN,IAC5B,EAAKpT,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,eACE,MAKJrC,MAGToT,YA1P8C,WA0PhC,WACZ,GAAKpT,KAAKiU,QAAQ7U,EAAE8W,cAEpB,OAAO,IAAIC,SAAQ,SAACC,GAClB,IAGIxW,EAHEyW,EAAO,EAAKvD,YAClBuD,EAAKD,QAAUA,EAGf,EAAKb,eAAiB,KAmEtB,EAAKJ,mBAAqBkB,EAAKjB,WAC1B,EAAKD,mBACRkB,EAAKjB,WAAa,EAAKvC,OAAO/N,qBAAqBa,QAGrD0Q,EAAKC,UAAYD,EAAKC,WAAa,IACnCD,EAAKxK,MAAQwK,EAAKxK,OAAS,IAC3BwK,EAAKE,QAAUF,EAAKE,SAvEI,SAACC,IACvBA,EAAOC,KAAKC,MAAMF,IAETG,aACH/W,IAAc4W,EAAKG,YAAcH,EAAKG,WAAWC,MAAM,WAIzDhX,EAAY4W,EAAKG,YAIC,aAAhBH,EAAKK,SACPvB,cAAc,EAAKC,gBAEd,EAAKJ,mBACR,EAAKrC,YAAYsC,gBAAaC,GAGhCe,IACiB,OAAbI,EAAKM,KACPC,MAAM,qBAAuBV,EAAKxW,UAAY2W,EAAKM,MAMvDE,QAAQC,IAAIT,KA6ChBH,EAAKa,gBAAkBb,EAAKa,iBAvCI,SAACV,GAC/B5W,EAAYyW,EAAKzW,UAAY4W,EAE7B,EAAKjB,eAAiB4B,aAAY,WAChC,IACMC,EAAM,IAAIC,QAAJ,UAAezX,EAAf,YAA4B0X,KAAKC,OAD7B,CAACC,OAAQ,QAEzBC,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKrB,EAAKE,WACZF,EAAKC,YA6BVD,EAAKyB,eAAiBzB,EAAKyB,gBAzBI,SAACC,GAC9B,IAAMC,EAAO,IAAIC,SACjBD,EAAKE,OAAO,aAAczB,KAAK0B,UAAUJ,EAAW3C,aACpD4C,EAAKE,OAAO,QAASH,EAAWlM,OAChCmM,EAAKE,OAAO,UAAU,GAEtB,IAAME,EAAU,CAACZ,OAAQ,OAAQa,KAAML,GACjCZ,EAAM,IAAIC,QAAQU,EAAWpY,eAAgByY,GACnDX,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKK,EAAWb,kBAerBb,EAAKyB,eAAezB,SAK1BjX,EAAEmH,sBAAsBzE,KAAO,SAAC8Q,EAAOpT,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBoT,KAAKG,EAAOpT,K,eCzVjDJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEsL,iBAAiB+H,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CACzCC,QAAS,CACP8Y,QAAS,GACTC,QAAS,gBACT7F,OAAQtT,EAAE0Q,iBAAiB0I,YAG7B1Y,WAPyC,SAO9B0C,EAAShD,GAClBQ,KAAKyY,SAAWjW,EAChBxC,KAAK0Y,eAAgB,EACrB1Y,KAAK4D,MAAQpB,EAAQhD,QAAQmE,KAC7B3D,KAAK2Y,cAAe,EACpB3Y,KAAK4Y,WAAY,EAEjBxZ,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB0I,WAAWzF,OAAS,aAIzC7C,SApByC,WAqBvC,IAAM1N,EAAUxC,KAAKyY,SAErBzY,KAAKgT,YAAchT,KAAKR,QAAQyT,QAGhCzQ,EAAQqW,eACR7Y,KAAK8Y,aACL9Y,KAAK+Y,eACL/Y,KAAKgZ,4BAGDxW,EAAQ0H,eAAiB1H,EAAQhD,QAAQgW,iBAC3CxV,KAAKqC,cAGPrC,KAAKiZ,cAAczW,EAAQyF,IAAKzF,EAAQyF,GAExC7I,EAAE8B,SAASR,GAAG8B,EAAQjB,aAAc,CAClC2X,SAAUlZ,KAAKmZ,UACdnZ,MAEHZ,EAAE8B,SAASR,GAAG0Y,OAAQ,UAAWpZ,KAAKqT,WAAYrT,OAIpD8Q,YA9CyC,WA+CvC,IAAMtO,EAAUxC,KAAKyY,SACfxQ,EAAKjI,KAAKiZ,YAOhB,IAAK,IAAII,KAJTrZ,KAAKsZ,mBAEDtZ,KAAKyK,SAAWzK,KAAKsC,iBAENtC,KAAKuZ,SACtBna,EAAE6C,QAAQ8O,OAAOsI,GAOfja,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAC3CnC,EAAE6C,QAAQ8R,YAAYvR,EAAQjB,aAAc,aAG1C0G,IAAQA,EAAG9F,gBAAkB8F,EAAGzH,QAAQiK,SAC1CxC,EAAGzH,QAAQ8B,iBAGblD,EAAE8B,SAASH,IAAIyB,EAAQjB,aAAc,CACnC2X,SAAUlZ,KAAKmZ,UACdnZ,MAEHZ,EAAE8B,SAASH,IAAIqY,OAAQ,UAAWpZ,KAAKqT,WAAYrT,OAGrDc,QA9EyC,WA+EvC,OAAKd,KAAKyT,UAEVzT,KAAKyY,SAASrW,WACdpC,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MALsBA,MAQ/B8Y,WAvFyC,WA2FvC,IAAK,IAAInV,KAHT3D,KAAKwZ,OAAS,GAGGpa,EAAEsL,iBAAiB+H,KAAKgH,MAAO,CAC9C,IAAI9D,EAASvW,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,IACD,IAAtC3D,KAAKgT,YAAY0G,QAAQ/D,KAC3B3V,KAAKwZ,OAAO7V,GAAQgS,GAMnB3V,KAAKwZ,OAAOxZ,KAAK4D,SACpB5D,KAAK4D,MAAQsE,OAAOC,KAAKnI,KAAKwZ,QAAQ,KAK1CT,aA1GyC,WA2GvC,IACI/V,EADER,EAAUxC,KAAKyY,SAIrB,IADAzY,KAAK2Z,aAAeva,EAAEwa,aACjB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAK2Z,aAAaE,SAASza,EAAE0a,WAAWtX,EAASQ,IAInD,IADAhD,KAAK+Z,cAAgB3a,EAAEwa,aAClB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAK+Z,cAAcF,SAASza,EAAE4a,YAAYxX,EAASQ,IAIrD,IADAhD,KAAKia,gBAAkB7a,EAAEwa,aACpB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKia,gBAAgBJ,SAASza,EAAE8a,cAAc1X,EAASQ,IAIzD,IADAhD,KAAKma,eAAiB/a,EAAEwa,aACnB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKma,eAAeN,SAASza,EAAEgb,aAAa5X,EAASQ,IAKvD,IADAhD,KAAKqa,mBAAqBjb,EAAEwa,aACvB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKqa,mBAAmBR,SAASza,EAAEkb,iBAAiB9X,EAASQ,IAI/D,IADAhD,KAAKua,aAAenb,EAAEwa,aACjB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKua,aAAaV,SAASza,EAAEob,WAAWhY,EAASQ,EAAG,CAACyX,WAAW,KAGlEza,KAAKuZ,SAAW,CACdlY,KAAMrB,KAAK2Z,aACX9N,MAAO7L,KAAK+Z,cACZW,QAAS1a,KAAKia,gBACdU,OAAQ3a,KAAKma,eACbS,WAAY5a,KAAKqa,mBACjBQ,KAAM7a,KAAKua,eAIfvB,0BAvJyC,WAwJvC,IAAM8B,EAAK9a,KAAKyY,SAGXzY,KAAK4D,OAKV5D,KAAK+a,iBAEAD,EAAG5Q,cAAgBlK,KAAKgb,eAC3Bhb,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASpa,aAGtCd,KAAKmb,OAAO,SAAWnb,KAAKob,mBAZ/Bpb,KAAKob,mBAeT/H,WA3KyC,SA2K9BrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KACvBmH,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAEZhR,GAAMA,EAAG9F,qBAEakT,IAAtBrV,KAAK0T,IAA+BoH,EAAGtb,QAAQgW,iBAC7CsF,EAAG5Q,cAAgBlK,KAAKyK,SAC1BzK,KAAK0T,GAAaxT,KAAKF,OAK7Bqb,YA1LyC,SA0L7BC,EAAKC,GAAM,WACrB,MAAuB,yBAAnBA,EAAK1F,WAAwC7V,KAAKiU,QAAQsH,IAG9Dvb,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASuF,EAAK,CAIhB,IAAK,IAAI3X,KAHT,EAAKrB,iBACL,EAAK0Q,YAAYgD,GAAOuF,EACxB,EAAKlZ,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU2X,UACnC,EAAK9B,OAAO7V,GACnB,EAAK6X,YAAY7X,IACRvE,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU4X,IACjD,EAAK/B,OAAO7V,GAAQ4X,GAGxB,OAAO,MAfFvb,MAqBX4V,QAjNyC,SAiNjCF,GACN,GAAwB,yBAApBA,EAAMG,YAAyC7V,KAAKiU,QAAQyB,GAAQ,CAItE,IAAK,IAAI/R,KAHT3D,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU+R,IAC1C1V,KAAKwZ,OAAO7V,GAAQ+R,GAGnB1V,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBAE1C,OAAOtC,MAGTiU,QAhOyC,SAgOjCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDI,WApOyC,SAoO9BJ,GAAO,WAgBhB,OAfA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASL,EAAO,CAIlB,IAAK,IAAI/R,KAHT,EAAKrB,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU+R,WACnC,EAAK8D,OAAO7V,GACnB,EAAK6X,YAAY7X,IAGrB,OAAO,MAGN3D,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBACjCtC,MAITwb,YAxPyC,SAwP7B7X,GACN3D,KAAKmb,OAAOxX,KACVuE,OAAOC,KAAKnI,KAAKyb,YAAY5W,QAAU,EACzC7E,KAAKmZ,YAEQ,SAATxV,GAAmB3D,KAAKob,kBAC5Bpb,KAAK4D,MAAQ,GACb5D,KAAK+a,mBAKXzY,eApQyC,WAqQvC,IACIhC,EADON,KAAKyY,SACHlY,KAETP,KAAKyK,UACPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,IAInB2Q,gBA9QyC,WA8QvB,WACZ5Y,EAAUxC,KAAKyY,SACbnY,EAAMkC,EAAQjC,KAEpBP,KAAKkb,SAAW,IAAI9b,EAAEsc,UAAUlZ,EAAQjB,cACxCvB,KAAKkb,SAASza,SAGdT,KAAKkb,SAASxa,GAAG,aAAa,WAC5B8B,EAAQqG,KAAK,aACb,EAAKvG,oBAOPtC,KAAKkb,SAASS,gBAAkB,WAC9B,IAEIC,EAEA5Y,EAJEK,EAAUb,EAAQW,UAAU,GAC5BG,EAAQtD,KAAK6b,QAAQtY,SAASjD,EAAI8C,mBAAmBC,IAEvDkC,EAAU,GAKd,IAFAvF,KAAK6I,KAAK,WAEL7F,EAAI,EAAGA,EAAI,EAAGA,IACjB4Y,EAAetb,EAAI8C,mBAAmBZ,EAAQW,UAAUH,IACxDuC,EAAQvC,GAAK1C,EAAIqL,mBAAmBiQ,EAAahS,IAAItG,IAGvDd,EAAQ+I,WAAWhG,GACnB/C,EAAQqG,KAAK,QAEb7I,KAAK6I,KAAK,SAGZ7I,KAAKkb,SAASxa,GAAG,WAAW,WAC1B8B,EAAQqG,KAAK,eAIjByQ,iBAxTyC,WAyTnCtZ,KAAKkb,WACPlb,KAAKkb,SAASpa,iBACPd,KAAKkb,WAIhBY,UA/TyC,WAgUvC9b,KAAK+b,QAAQ,SAGfC,WAnUyC,WAoUvChc,KAAK+b,QAAQ,UAGfE,aAvUyC,WAwUvCjc,KAAK+b,QAAQ,YAGfG,YA3UyC,WA4UvClc,KAAK+b,QAAQ,WAGfI,gBA/UyC,WAgVvCnc,KAAK+b,QAAQ,eAGfK,gBAnVyC,WAoVnCpc,KAAKmb,OAAO,QAAWnb,KAAKmU,UACzBnU,KAAKsU,SAGd+H,eAxVyC,WAyVvC,IACI/D,EADElK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEkd,iBAEpBtc,KAAK2Y,cAAgB3Y,KAAK2Y,aAC1BL,EAAUtY,KAAK2Y,aAAe3Y,KAAKR,QAAQ8Y,QAAU,EAErDlZ,EAAE6C,QAAQgZ,WAAW7M,EAAOkK,GAC5BlK,EAAM8C,aAAa,UAAWoH,GAE9BtY,KAAKuc,aAGPC,cAvWyC,WAwWvC,IACIjE,EADEnK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEqd,gBAEpBzc,KAAK4Y,WAAa5Y,KAAK4Y,UACvBL,EAAUvY,KAAK4Y,UAAY5Y,KAAKR,QAAQ+Y,QAAU,OAElDnK,EAAMjC,MAAMoM,QAAUA,EAEtBvY,KAAKuc,aAIPG,aAtXyC,WAuXnC1c,KAAK0Y,cAAiB1Y,KAAK2c,WACxB3c,KAAK4c,cAGdC,eA3XyC,WA4XvC,IAAI/B,EAAK9a,KAAKyY,SACRxQ,EAAKjI,KAAKiZ,aAEZjZ,KAAKmb,OAAO,SAAYnb,KAAKiU,QAAQ7U,EAAEyV,eAE5BzV,EAAE6C,QAAQ6a,kBAGzB9c,KAAKsC,iBAED2F,EAAMA,EAAGgN,YAAY6F,GAClBA,EAAGva,KAAK0U,YAAY6F,KAI7BiC,WA3YyC,WA4YvC,IAAIva,EAAUxC,KAAKyY,SACfnY,EAAMkC,EAAQjC,KACdoE,EAAMnC,EAAQjB,aAElB,GAAKvB,KAAKiU,QAAQ7U,EAAE8W,cAApB,CAGA,IAAI8G,EAAe,IAAIC,MAEvBD,EAAanX,GAAKmX,EAAanX,IAAM,cACrCmM,SAASqG,KAAK5Q,YAAYuV,GAE1BA,EAAaE,OAAS,WACpB,IAAIlX,EAASgX,EAAahX,OACtBD,EAAQiX,EAAajX,MACrBoX,EAAK7c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cia,EAAK9c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cka,EAAK/c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cma,EAAKhd,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAsBlD6Z,EAAaE,OAAS,WACpB9d,EAAE6C,QAAQ8O,OAAOiM,IAGf5D,QAAUA,OAAOmE,eAAe,cAClCC,UACIR,EAAanX,GACb,CAAC,EAAG,EAAGE,EAAO,EAAGA,EAAOC,EAAQ,EAAGA,GACnC,CAACmX,EAAGlZ,EAAGkZ,EAAGjZ,EAAGkZ,EAAGnZ,EAAGmZ,EAAGlZ,EAAGoZ,EAAGrZ,EAAGqZ,EAAGpZ,EAAGmZ,EAAGpZ,EAAGoZ,EAAGnZ,IAC9C,IAKR8Y,EAAa9X,IAAM1C,EAAQhD,QAAQie,mBAAqB9Y,EAAIO,MAG9DyX,SArcyC,WAsc/B3c,KAAK0Y,eAEF1Y,KAAKiU,QAAQ7U,EAAEse,eAE1B1d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASI,eACd7Y,KAAKuc,aAGPK,WA/cyC,YAgd/B5c,KAAK0Y,eAEH1Y,KAAKiU,QAAQ7U,EAAEse,eAEzB1d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASkF,cACd3d,KAAKuc,aAGPpI,QAzdyC,WA0dvC,IAAI2G,EAAK9a,KAAKyY,SACVnY,EAAMwa,EAAGva,KACP0H,EAAKjI,KAAKiZ,YAEXjZ,KAAKmb,OAAO,YACZlT,GAAOA,EAAG1F,YAAYuY,KAAS7S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eACvB,SAApBF,EAAGtb,QAAQmE,MAAoB3D,KAAK4d,QAAQ9C,EAAGtb,QAAQmE,MAIzD3D,KAAK4D,MAAQkX,EAAGtb,QAAQmE,MAHxB3D,KAAK4D,MAAQ,GACb5D,KAAKgb,cAAgB,IAIvBhb,KAAK+a,gBACL/a,KAAKob,kBACLpb,KAAKuc,aAGPjI,MA/eyC,WAgfvC,IAAMwG,EAAK9a,KAAKyY,SACVnY,EAAMwa,EAAGva,KACT0H,EAAKjI,KAAKiZ,YAEZjZ,KAAKmb,OAAO,YACXlT,GAAOA,EAAG1F,YAAYuY,KAAS7S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eAC/Chb,KAAK4D,MAAQ,OACb5D,KAAK+a,gBACL/a,KAAKsZ,mBACLtZ,KAAKuc,aAGPsB,UAhgByC,WAigBvC7d,KAAKyY,SAASrW,YAGhBiI,aApgByC,SAogB5BrJ,GACX,IAAMiH,EAAKjI,KAAKiZ,YAEXjZ,KAAKgb,iBAELhb,KAAKmb,OAAO,SAAYlT,GAAMA,EAAG9F,gBAEtCnC,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASza,SACvCrB,EAAE6C,QAAQ4N,SAASwJ,EAAO9X,aAAc,4BAI5C4I,aAlhByC,WAmhBvC,IAAM2Q,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAGXjZ,KAAKuZ,UAAYvZ,KAAK+Y,eAEtB/Y,KAAKgb,gBACNhb,KAAKmb,OAAO,SAAYlT,GAAMA,EAAG1F,YAAYuY,IAEjD9a,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASpa,UACvC1B,EAAE6C,QAAQ8R,YAAYsF,EAAO9X,aAAc,4BAI/CwZ,cAniByC,WAoiBvC,IACIza,EADON,KAAKyY,SACHlY,KACPoD,EAAO3D,KAAK8d,UAEd9d,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eAC/Chb,KAAKgb,cAAyB,KAATrX,EAAc,GAAK3D,KAAKuZ,SAAS5V,GAC3B,KAAvB3D,KAAKgb,eACP1a,EAAIuZ,SAAS7Z,KAAKgb,gBAItB3Y,YA/iByC,WAgjBvC,IAAIyY,EAAK9a,KAAKyY,SACRxQ,EAAKjI,KAAKiZ,YACZ3Y,EAAMwa,EAAGva,KAEPgF,EAAUuV,EAAGxV,aACfyY,GAAS,IAEb,GAAI9V,GAAMA,EAAG9F,eACX8F,EAAGzH,QAAQ6B,mBAIb,IAAIyY,EAAGtb,QAAQgW,kBAAmBxV,KAAKyK,QAAvC,CAEA,IAAK,IAAIzH,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAMuY,IACnBA,EAASxY,EAAQvC,GAAGwC,KAKxB,IAAIwY,EAAclD,EAAGvR,YACrByU,EAAYxY,IAAMuY,EAElB/d,KAAKyK,QAAUrL,EAAE0Q,iBAAiBmO,SAASD,EAAa,CACtD/K,QAASjT,KAAKgT,cACbpB,MAAMtR,EAAKwa,GACdA,EAAGjS,KAAK,qBAGV0T,SA9kByC,WA+kBnCvc,KAAKyK,SAAWzK,KAAKsC,iBACzBtC,KAAKqC,eAGPuI,kBAnlByC,WAolBvC,IAAMpI,EAAUxC,KAAKyY,SAEflT,EAAU/C,EAAQ8C,aACpBmF,EAAUzK,KAAKyK,QACfsT,GAAS,IAEb,GAAItT,GAAWA,aAAmBrL,EAAEsL,iBAAiBC,SAAU,CAC7D,IAAK,IAAI3H,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAMuY,IACnBA,EAASxY,EAAQvC,GAAGwC,KAKxB,IAAIwY,EAAcxb,EAAQ+G,YAC1ByU,EAAYxY,IAAMuY,EAEbvb,EAAQhD,QAAQgW,iBACnBxV,KAAKyK,QAAQyT,UAAUF,KAK7BJ,QA3mByC,SA2mBjCja,GACN,QAAS3D,KAAKwZ,OAAO7V,IAGvBma,QA/mByC,WAgnBvC,GAAK9d,KAAKgC,UACV,OAAOhC,KAAK4D,OAGd6X,SApnByC,WAqnBvC,OAAOzb,KAAKwZ,QAGd2B,OAxnByC,SAwnBlCxX,GACL,QAAK3D,KAAKgC,WACHhC,KAAK4D,QAAUD,GAGxBoY,QA7nByC,SA6nBjCoC,GACN,IAAMrD,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAGhB,GAFWjZ,KAAK8d,YAEHK,GAAYne,KAAK4d,QAAQO,IAAane,KAAKgC,UAaxD,OATIhC,KAAKyK,SAAWzK,KAAKyK,QAAQ2T,UAAUD,GACvCne,KAAKmb,OAAO,UAAYnb,KAAKkb,UAAYlb,KAAKob,kBAClDpb,KAAK4D,MAAQua,EACTne,KAAKmb,OAAO,SAAWnb,KAAKsZ,mBAChCtZ,KAAK+a,gBACL/a,KAAKuc,WAEDtU,GAAMA,EAAG1F,YAAYuY,IAAOA,EAAG1Y,WAE5BpC,MAOTmZ,SAtpByC,SAspBhCnY,GACP,IAAI2C,EAAO3D,KAAK8d,UACV7V,EAAKjI,KAAKiZ,YACZoF,EAAanW,OAAOC,KAAKnI,KAAKyb,YAC9BzF,EAAMqI,EAAW3E,QAAQ/V,GAEzBwa,EAAUE,GADCrI,EAAM,GAAKqI,EAAWxZ,QAGrC,GAAI7D,EAAG,CACL,GAAIiH,GAAMA,EAAG9F,eAAkB,OAC/B/C,EAAE8B,SAASod,KAAKtd,GAGlB,OAAOhB,KAAK+b,QAAQoC,MAIxB/e,EAAE0Q,iBAAiBhO,KAAO,SAACU,EAAShD,GAClC,OAAO,IAAIJ,EAAEsL,iBAAiB+H,KAAKjQ,EAAShD,K,eC3qB9CJ,EAAEqd,aAAerd,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK8W,WACP4F,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAYiQ,eAEtCF,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAYkQ,YAGxCnf,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAI5CvE,EAAEsL,iBAAiB8N,WAAWuG,EAAa,SAATpb,EAAkB,GAAK,gBAEzDvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BmC,WA8BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,eAAgB,gBACnD7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpDnd,EAAK0a,oB,eClCTpd,EAAEyV,aAAezV,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIif,EAFE3c,EAAOU,EAAQhC,QAOjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCgM,EAAUjc,EAAQhD,QAAQiP,YAAYyQ,YAEtC9f,EAAEsL,iBAAiB8N,WAAW2G,UACb,SAAfrd,EAAK8B,MAAmB,GAAK,mBAG/B6a,EAAUjc,EAAQhD,QAAQiP,YAAY2Q,aACtChgB,EAAEsL,iBAAiBiI,iBAAiBwM,UACnB,SAAfrd,EAAK8B,MAAmB,GAAK,iBAIjCpE,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAtBU,iBAuBVL,QAASA,EACT5M,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAjCmC,WAkCjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAK+a,iBAC7C/a,EAAK8S,mB,eCrChBxV,EAAEigB,cAAgBjgB,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAY6Q,aACrCzN,UAAW,WAGbzS,EAAEsL,iBAAiB8N,WAAW+G,EAAI,eAClCngB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdoC,WAevBlQ,KAAKyY,SAASjY,QACpByb,mB,eChBT7c,EAAEogB,WAAapgB,EAAEmf,WAAWhf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,OACNL,QAASjc,EAAQhD,QAAQiP,YAAYgR,UACrC5N,UAAW,QAGbzS,EAAEsL,iBAAiB8N,WAAWkH,EAAI,YAClCtgB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdiC,WAelBlQ,KAAKyY,SAASjY,QACtBsb,gB,eChBT1c,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEmf,WAAanf,EAAEugB,SAASC,OAAOrgB,OAAO,CACtCC,QAAS,CACPof,YAAa,CACXC,KAAK,EACLC,KAAM,GACNjN,UAAW,GACX4M,QAAS,KAIb3e,WAVsC,SAU3BQ,EAAKkC,EAAShD,GACvBQ,KAAKyY,SAAWjW,EAChBxC,KAAKO,KAAOD,EAEZlB,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEugB,SAASC,OAAO3f,UAAUH,WAAWI,KAAKF,KAAMR,GAElDQ,KAAK+R,kBAGP8N,YApBsC,SAoB1BpV,EAASuG,EAAW8O,GAAM,WAC9BC,EAAc/f,KAAKR,QAAQof,YAC3B/M,EAAYkO,EAAYlO,UACxB/P,EAAO9B,KAAKyY,SAASjY,QAE3BR,KAAKyK,QAAUA,EACfzK,KAAKggB,MAAQ5gB,EAAE6C,QAAQgP,OAAO,KAAM,GAAID,GACxChR,KAAKif,MAAQ7f,EAAE6C,QAAQgP,OAAO,IAAK,GAAIjR,KAAKggB,OAExCD,EAAYlB,IACd7e,KAAKif,MAAM5N,UAAYjS,EAAEkS,SAASL,OAAO8O,EAAYjB,MAErD9e,KAAKif,MAAM5N,UAAY0O,EAAYjB,KAGrC9e,KAAKif,MAAM/N,aAAa,OAAQ,KAChClR,KAAKif,MAAM/N,aAAa,QAAS6O,EAAYtB,SAC7CzH,QAAQiJ,KAAKxJ,KAAK0B,UAAU4H,IACxBA,EAAY5T,OAASnM,KAAKif,MAAM/N,aAAa,QAAS6O,EAAY5T,OACtEnM,KAAKif,MAAM/N,aAAa,OAAQ,UAEhC9R,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAOjf,KAAKkgB,YAAYrK,WAE5ChE,IACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAOpN,GACb,aAAdA,GACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKggB,MAAOnO,GAE7BA,IAAc/P,EAAK8B,MACrBxE,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAO,iBAE/B7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAO,kBAItC7f,EAAE8B,SAASR,GAAGV,KAAKif,MAAO,QAASjf,KAAKS,OAAQT,MAChDZ,EAAE8B,SAASR,GAAGV,KAAKyY,SAAU,UAAU,WACrC,IAAM7B,EAAQ,EAAKqI,MAAM5N,UAAUuF,MAAM,yBACrCA,GAA0B,IAAjBA,EAAM/R,QAAgB,EAAKsb,mBAI1CngB,KAAKogB,eAAe3V,EAASzK,KAAKggB,MAAOF,IAG3C/N,eAjEsC,WAkEpC,IAAIC,SAASC,cAAc,YAA3B,CAIA,IAAIC,EAAKF,SAASqO,cAAc,OAChCnO,EAAGrM,GAAK,UACRqM,EAAGhB,aAAa,SAAU,UAC1BgB,EAAGb,WAAY,IAAIjS,EAAEkhB,gBAAiBjO,SAEtCL,SAASC,cAAc,wBAAwBxK,YAAYyK,KAG7DiO,cA9EsC,WA+EpC/gB,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAMsB,cAAe,YAChDnhB,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAO,aAGpCuB,eAnFsC,WAoFpCphB,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAMsB,cAAe,YAC7CnhB,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAO,eAInC7f,EAAEqhB,WAAa,SAASngB,EAAKkC,EAAShD,GACpC,OAAO,IAAIJ,EAAEmf,WAAWje,EAAKkC,EAAShD,K,eC/FxCJ,EAAE8W,aAAe9W,EAAEmf,WAAWhf,OAAO,CAEnCO,WAFmC,SAExBQ,EAAKkC,EAAShD,GACvB,IACIif,EADE3c,EAAOU,EAAQhC,QAGrBR,KAAK0gB,aAAc,EACnB1gB,KAAK2gB,gBAAiB,EACtB3gB,KAAK4gB,iBAAkB,EAEnB9e,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAWxX,EAAI,aAClCyd,EAAUjc,EAAQhD,QAAQiP,YAAYoS,cAEtCzhB,EAAEsL,iBAAiBiI,iBAAiB3R,EAAI,cACxCyd,EAAUjc,EAAQhD,QAAQiP,YAAYqS,eAGxCthB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASA,GAGXrf,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BmC,WA6BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3B,GAAIsB,aAAgB1C,EAAEsL,iBAAiB+H,KACrC3Q,EAAKib,kBAKP,IAAI/c,KAAK4gB,gBAAT,CAGE5gB,KAAK4gB,iBAAkB,EAGzB,IAAMG,EAAa/gB,KAAKif,MAAMsB,cAE9BvgB,KAAKghB,kBAAoBhhB,KAAKihB,iBAAiBre,KAAK5C,MACpDA,KAAKkhB,kBAAoBlhB,KAAKmhB,iBAAiBve,KAAK5C,MAEpDZ,EAAE8B,SAASR,GAAGqgB,EAAY,SAAS,WACjC,GAAK/gB,KAAK0gB,YAWH,CAEL,GAAI1gB,KAAK2gB,eACP,OAGF3gB,KAAKohB,aACLphB,KAAKqhB,0BAA0BN,GAC/Bjf,EAAKoT,oBAlBLlV,KAAK0gB,aAAc,EACnB1gB,KAAKshB,mBAELC,WAAWvhB,KAAKwhB,0BAA0B5e,KAAK5C,KAAM+gB,GAAa,KAClEjf,EAAKoR,cAAcwE,KACf,WACE1X,KAAKohB,aACLphB,KAAKqhB,0BAA0BN,IAC/Bne,KAAK5C,SAYZA,QAGLohB,WAzEmC,WA0EjCphB,KAAKyhB,qBACLzhB,KAAK0gB,aAAc,EACnB1gB,KAAK2gB,gBAAiB,GAGxBa,0BA/EmC,SA+ETE,GACxBA,EAAQC,iBAAiB,aAAc3hB,KAAKghB,mBAC5CU,EAAQC,iBAAiB,aAAc3hB,KAAKkhB,oBAG9CG,0BApFmC,SAoFTK,GACxBA,EAAQE,oBAAoB,aAAc5hB,KAAKghB,mBAC/CU,EAAQE,oBAAoB,aAAc5hB,KAAKkhB,oBAGjDD,iBAzFmC,WA0FjCjhB,KAAK6hB,oBAGPV,iBA7FmC,WA8F5BnhB,KAAK2gB,eAGR3gB,KAAK2gB,gBAAiB,EAFtB3gB,KAAKshB,oBAMTG,mBArGmC,WAsGjCriB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,UAAW,WAC9C7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAM6C,WAAY,WAG/CR,iBA3GmC,WA4GjCliB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,WACnC7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAEkS,SAASyQ,cAAc/hB,KAAKif,MAAO,WAGvC4C,iBAjHmC,WAkHjCziB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,UACnC7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAM6C,WAAY,c,cCpHjD1iB,EAAE4iB,iBAAmB5iB,EAAEmf,WAAWhf,OAAO,CACvCO,WADuC,SAC5BQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,cACNL,QAASjc,EAAQhD,QAAQiP,YAAYwT,gBACrCpQ,UAAW,cAGbzS,EAAEsL,iBAAiB8N,WAAW0J,EAAI,kBAClC9iB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAduC,WAe1BlQ,KAAKyY,SAASjY,QACpB2b,sB,eChBT/c,EAAE+iB,gBAAkB/iB,EAAEmf,WAAWhf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IAAMsC,EAAOU,EAAQhC,SAErBhB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAY2T,eACrCvQ,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAfsC,WAgBpC,IAAI9B,EAAQpO,KAAKyY,SAASlX,aAE1B8gB,KAAKC,QAAQlU,EAAOhP,EAAEijB,KAAKjU,Q,eClB/BhP,EAAEiV,WAAajV,EAAEmf,WAAWhf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,GACvB,IACIgf,EACAC,EAFE3c,EAAOU,EAAQhC,QAIjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAW+J,EAAI,UAClCnjB,EAAEsL,iBAAiB8N,WAAWgK,EAAI,QAClC/D,EAAUjc,EAAQhD,QAAQiP,YAAYgU,SAEtCjE,EAAM1c,EAAKqZ,OAAO,QAAU,OAAS,WAErC/b,EAAEsL,iBAAiBiI,iBAAiB6P,EAAI,aACxC/D,EAAUjc,EAAQhD,QAAQiP,YAAYiU,WACtClE,EAAM,SAGRhf,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAW,QAGbzS,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BiC,WA8B/B,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAKsa,kBAC7Cta,EAAKsS,iB,0BCjChBhV,EAAEujB,gBAAkBvjB,EAAEmf,WAAWhf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK6W,cACP6F,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAYmU,kBAEtCpE,EAAM,YACNC,EAAUjc,EAAQhD,QAAQiP,YAAYoU,uBAGxCrjB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAG5CnE,EAAQsjB,WAAa,IAAI1jB,EAAEugB,SAAS,CAClC1M,QAAS,CAAC8P,EAAiBC,EAAgBC,EAAgBC,EAAgBC,EAAgBC,EAAeC,KAK5GjkB,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAjCsC,eA4CxC,IAAIoT,EAAqBlkB,EAAEugB,SAASC,OAAOrgB,OAAO,CAChDO,WADgD,SACrCQ,EAAKijB,GAIdnkB,EAAEugB,SAASC,OAAO3f,UAAUH,WAAWI,KAAKF,OAE9CkQ,SAPgD,WAQ9ClQ,KAAKujB,SAASziB,aAIdsiB,EAAgBhkB,EAAEmf,WAAWhf,OAAO,CACtCC,QAAS,CACPof,YAAa,CACXE,KAAM,EACNL,QAAS,aACT5M,UAAW,gCACX1F,MAAO,wCAGX+D,SAAU,WAERoT,EAAmBrjB,UAAUiQ,SAAShQ,KAAK,MAI3CijB,EAAiB/jB,EAAEmf,WAAWhf,OAAO,CACvCC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,cACT5M,UAAW,gCACX1F,MAAO,wCAGX+D,SAAU,WAERoT,EAAmBrjB,UAAUiQ,SAAShQ,KAAK,MAI3CgjB,EAAiB9jB,EAAEmf,WAAWhf,OAAO,CACvCC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,cACT5M,UAAW,gCACX1F,MAAO,wCAGX+D,SAAU,WAERoT,EAAmBrjB,UAAUiQ,SAAShQ,KAAK,MAI3C+iB,EAAiB7jB,EAAEmf,WAAWhf,OAAO,CACvCC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,cACT5M,UAAW,gCACX1F,MAAO,wCAGX+D,SAAU,WAERoT,EAAmBrjB,UAAUiQ,SAAShQ,KAAK,MAI3C8iB,EAAiB5jB,EAAEmf,WAAWhf,OAAO,CACvCC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,cACT5M,UAAW,gCACX1F,MAAO,wCAGX+D,SAAU,WAERoT,EAAmBrjB,UAAUiQ,SAAShQ,KAAK,MAI3C6iB,EAAkB3jB,EAAEmf,WAAWhf,OAAO,CACxCC,QAAS,CACPof,YAAa,CACXE,KAAM,IACNL,QAAS,eACT5M,UAAW,gCACX1F,MAAO,sCAGX+D,SAAU,WAERoT,EAAmBrjB,UAAUiQ,SAAShQ,KAAK,MAI3CmjB,EAASjkB,EAAEmf,WAAWhf,OAAO,CAC/BC,QAAS,CACPof,YAAa,CAEXE,KAAM,IACNL,QAAS,SACT5M,UAAW,kCAIf3B,SAAU,WACR,EAAKuI,SAAS3X,UACd,EAAKA,c,eC9JT1B,EAAEkd,cAAgBld,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK6W,cACP6F,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAYmU,kBAEtCpE,EAAM,UACNC,EAAUjc,EAAQhD,QAAQiP,YAAYoU,uBAGxCrjB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAG5CvE,EAAEsL,iBAAiB8N,WAAWgL,EAAa,SAAT7f,EAAkB,GAAK,iBAEzDvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BoC,WA6BlC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QACrBijB,EAAOzjB,KAAKif,MAElB7f,EAAEkS,SAAS0N,YAAYyE,EAAM,UAAW,iBACxCrkB,EAAEkS,SAASQ,YAAY2R,EAAM,yBAA0B,qBACvD3hB,EAAKua,qB,eClCTjd,EAAEskB,cAAgBtkB,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAAImE,EAAOvE,EAAEe,MAAMgT,aAAa3Q,EAAS,UAAW,SAChDqI,EAASrI,EAAQqI,QAErBrL,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAYkV,aACrC9R,UAAWhH,GAAmB,SAATlH,EAAkB,GAAK,YAG9CvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAhBoC,WAiBlC,IAAM4K,EAAK9a,KAAKyY,SAEhBrZ,EAAE8B,SAASR,GAAGoa,EAAI,CAChBhZ,KAAM9B,KAAKmgB,cACXrS,QAAS9N,KAAKwgB,gBACbxgB,MAEH8a,EAAGhN,c,eCxBP1O,EAAEwkB,aAAexkB,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASjc,EAAQhD,QAAQiP,YAAYoV,YACrChS,UAAW,UAGbzS,EAAEsL,iBAAiB8N,WAAWsL,EAAI,cAClC1kB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdmC,WAepBlQ,KAAKyY,SAASjY,QACtB0b,kB,eChBT9c,EAAE2kB,YAAc3kB,EAAEmf,WAAWhf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,QACNL,QAASjc,EAAQhD,QAAQiP,YAAYuV,WACrCnS,UAAW,SAGbzS,EAAEsL,iBAAiB8N,WAAWyL,EAAI,aAClC7kB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdkC,WAenBlQ,KAAKyY,SAASjY,QACtBwb,iB,eChBT5c,EAAEse,YAActe,EAAEmf,WAAWhf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,GACvB,IACIgf,EACAC,EAFE3c,EAAOU,EAAQhC,QAIjBsB,EAAK4W,eACP8F,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAYyV,eAEtC1F,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAY0V,cAGxC3kB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEsL,iBAAiB8N,WAAWlL,EAAmB,SAAfxL,EAAK8B,MAAmB,GAAK,WAC/DxE,EAAEsL,iBAAiB8N,WAAW4L,EAAmB,SAAftiB,EAAK8B,MAAmB,GAAK,aAE/DxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BkC,WA6BhC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,gBAAiB,gBACpD7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,iBAAkB,iBACrDnd,EAAK4a,mB,eCjCTtd,EAAE8U,aAAe9U,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASjc,EAAQhD,QAAQiP,YAAY4V,cAGvCjlB,EAAEsL,iBAAiBiI,iBAAiB4P,EAAI,eACxCnjB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAbmC,WActBlQ,KAAKyY,SAASjY,QACpBwT,mB,eCdT5U,EAAEijB,KAAO,SAAqB1d,GAC5B,GAAiD,IAA7CuD,OAAOC,KAAKka,KAAKiC,WAAW3f,IAAME,OAAc,CAClDmS,QAAQC,IAAIoL,KAAKiC,WAAW3f,IAC5B,IAAM4f,EAAMlC,KAAKiC,WAAW3f,QAKC,IAApB4f,EAAIC,kBACiB,IAArBD,EAAIE,eAKTF,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAEhBD,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GAEfF,EAAIG,eAGJH,EAAII,iBAUqB,MAA3BJ,EAAIK,oBAK8B,MAA3BL,EAAIK,oBAHVvZ,KAAKyB,GACLyX,EAAIM,gBAAgBC,UAAYP,EAAIM,gBAAgBE,aAOvD/N,QAAQC,IAAI,yBAGdD,QAAQC,IAAI,eAAgBsN,EAAIS,cAGR,IAApBT,EAAIS,aAGuB,IAApBT,EAAIS,aAGgB,IAApBT,EAAIS,cAJH3Z,KAAKyB,QAWY,IAApByX,EAAIU,kBACmB,IAAvBV,EAAIW,qBAKkB,IAApBX,EAAIU,kBACmB,IAAvBV,EAAIW,iBAGTX,EAAIU,YAAYH,UAAYP,EAAIU,YAAYF,YAC5CR,EAAIW,qBAMVnO,MAAM,4D,cClFV3X,EAAE+lB,cAAgB/lB,EAAEgmB,WAAW7lB,OAAO,CACpCC,QAAS,CACP6lB,KAAM,UACNC,KAAMlmB,EAAEkmB,KAAK,CACXC,QAEE,iVACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZoC,WAapB1lB,KAAK2lB,SAEXrb,UAAUtK,KAAK4lB,QAAS5lB,KAAK6lB,cAGvCC,aAlBoC,WAmBlC9lB,KAAKke,UAAUle,KAAK2lB,SAASxiB,UAAUnD,KAAK4lB,aAIhDxmB,EAAE8a,cAAgB,SAAS1X,EAASwT,EAAKxW,GACvC,OAAO,IAAIJ,EAAE+lB,cAAc3iB,EAASwT,EAAKxW,K,eCxB3CJ,EAAE2mB,WAAa3mB,EAAEgmB,WAAW7lB,OAAO,CACjCC,QAAS,CACP6lB,KAAM,OACNC,KAAMlmB,EAAEkmB,KAAK,CAEXC,QAAS,ykCACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAXiC,WAY/B,IAAIljB,EAAUxC,KAAK2lB,SACbK,EAAexjB,EAAQW,UAAUnD,KAAK4lB,SACtCK,EAAYjmB,KAAK6lB,YAEvBrjB,EAAQkL,OAAOsY,EAAcC,IAG/BH,aAnBiC,WAoB/B9lB,KAAKke,UAAUle,KAAK2lB,SAASxiB,UAAUnD,KAAK4lB,aAIhDxmB,EAAE0a,WAAa,SAAStX,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAE2mB,WAAWvjB,EAASwT,EAAKxW,K,eCzBxCJ,EAAEgmB,WAAahmB,EAAE8mB,OAAO3mB,OAAO,CAC7BO,WAD6B,SAClB0C,EAAS+H,EAAQ/K,GAC1B,IAAMgL,EAAShI,EAAQW,UAAUoH,GAEjCnL,EAAEW,WAAWC,KAAMR,GAEnBQ,KAAK2lB,SAAWnjB,EAChBxC,KAAK4lB,QAAUrb,EAEf,IAAM4b,EAAgB,CACpB1L,WAAW,EACX2L,aAAc,IAGZ5mB,GAAWA,EAAQ+d,eAAe,eACpC4I,EAAc1L,UAAYjb,EAAQib,WAGpCrb,EAAE8mB,OAAOjmB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQ2b,IAGnD9lB,MArB6B,SAqBvBC,GACJlB,EAAE8mB,OAAOjmB,UAAUI,MAAMH,KAAKF,KAAMM,GACpCN,KAAKqmB,iBACLrmB,KAAK8lB,gBAGPjlB,SA3B6B,SA2BpBP,GACPN,KAAKsmB,mBACLlnB,EAAE8mB,OAAOjmB,UAAUY,SAASX,KAAKF,KAAMM,IAGzCimB,mBAhC6B,WAiC3BvmB,KAAK2lB,SAAS9c,KAAK,cAGrB2d,iBApC6B,WAqC3BxmB,KAAKymB,aAGPA,UAxC6B,WAyC3BzmB,KAAK2lB,SAAS9a,QAAS,EACvB7K,KAAK2lB,SAAS9c,KAAK,SAGrBwd,eA7C6B,WA8C3BrmB,KAAKU,GAAG,CACNgB,YAAatC,EAAE8B,SAASod,KACxBnd,UAAWnB,KAAKumB,mBAChBllB,KAAMrB,KAAK0lB,cACXgB,QAAS1mB,KAAKwmB,kBACbxmB,MAEHA,KAAK2lB,SAASplB,KAAKG,GAAG,UAAWV,KAAK8lB,aAAc9lB,MACpDA,KAAK2lB,SAASjlB,GAAG,SAAUV,KAAK8lB,aAAc9lB,OAGhDsmB,iBAzD6B,WA0D3BtmB,KAAKe,IAAI,CACPW,YAAatC,EAAE8B,SAASod,KACxBnd,UAAWnB,KAAKumB,mBAChBllB,KAAMrB,KAAK0lB,cACXgB,QAAS1mB,KAAKwmB,kBACbxmB,MAEHA,KAAK2lB,SAASplB,KAAKQ,IAAI,UAAWf,KAAK8lB,aAAc9lB,MACrDA,KAAK2lB,SAAS5kB,IAAI,SAAUf,KAAK8lB,aAAc9lB,OAIjD2mB,wBAtE6B,SAsELC,EAASC,GAC/B,IAAMrkB,EAAUxC,KAAK2lB,SACfrlB,EAAMkC,EAAQjC,KAEdumB,EAAcxmB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmBwjB,GACrChZ,EAAWtN,EAAI8C,mBAAmByjB,GAClCE,EAAsB/mB,KAAKgnB,IAAIF,EAAanZ,GAC5CsZ,EAAmBjnB,KAAKgnB,IAAIF,EAAalZ,GAE/C,OAAOvC,KAAK6b,KAAKD,EAAmBF,IAItCC,IApF6B,SAoFzB5C,EAAGrF,GACL,IAAMoI,EAAK/C,EAAEngB,EAAI8a,EAAE9a,EACbmjB,EAAKhD,EAAElgB,EAAI6a,EAAE7a,EAEnB,OAAOmH,KAAKC,IAAI6b,EAAI,GAAK9b,KAAKC,IAAI8b,EAAI,IAIxCC,oBA5F6B,SA4FTT,EAASC,GAC3B,IAAMrkB,EAAUxC,KAAK2lB,SACfrlB,EAAMkC,EAAQjC,KAGdumB,EAAcxmB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmBwjB,GACrChZ,EAAWtN,EAAI8C,mBAAmByjB,GAElCS,EACJjc,KAAKkc,MAAMT,EAAY5iB,EAAIyJ,EAAYzJ,EAAG4iB,EAAY7iB,EAAI0J,EAAY1J,GAMxE,OAHEoH,KAAKkc,MAAMT,EAAY5iB,EAAI0J,EAAS1J,EAAG4iB,EAAY7iB,EAAI2J,EAAS3J,GAGhDqjB,M,eC5GtBloB,EAAEooB,iBAAmBpoB,EAAEgmB,WAAW7lB,OAAO,CACvCC,QAAS,CACP6lB,KAAM,aACNC,KAAMlmB,EAAEkmB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZuC,WAarC,IAAMljB,EAAUxC,KAAK2lB,SACfrlB,EAAMkC,EAAQjC,KACdylB,EAAexjB,EAAQW,UAAUnD,KAAK4lB,SACtCK,EAAYjmB,KAAK6lB,YACjBlZ,EAAQ3M,KAAKqnB,oBAAoBrB,EAAcC,GAC/Cpa,EAAQ7L,KAAK2mB,wBAAwBX,EAAcC,GAE3C,IAAVtZ,GAAenK,EAAQ6K,SAASV,EAAO,OAE3C,IAAIhG,EAAenE,EAAQmE,aACtBA,IAAgBA,EAAe,IAEpC,IAAM8gB,EAAUnnB,EAAIonB,uBAAuBllB,EAAQW,UAAU,IACvDwkB,EAAUrnB,EAAIonB,uBAAuBllB,EAAQW,UAAU,IACvD+L,EAAI7D,KAAKuc,IAAIH,EAAQxjB,EAAI0jB,EAAQ1jB,GACjCmL,EAAI/D,KAAKuc,IAAIH,EAAQvjB,EAAIyjB,EAAQzjB,GACtBmH,KAAK6b,KAAKhY,EAAIA,EAAIE,EAAIA,GACxBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAEhBrJ,EAAQoJ,QAAQ,IAIpBka,aArCuC,WAsCrC9lB,KAAKke,UAAUle,KAAK2lB,SAASxiB,UAAUnD,KAAK4lB,aAIhDxmB,EAAEkb,iBAAmB,SAAC9X,EAASwT,EAAKxW,GAClC,OAAO,IAAIJ,EAAEooB,iBAAiBhlB,EAASwT,EAAKxW,K,eC3C9CJ,EAAEyoB,WAAazoB,EAAEgmB,WAAW7lB,OAAO,CACjCC,QAAS,CACP6lB,KAAM,OACNyC,aAAa,EACbxC,KAAMlmB,EAAEkmB,KAAK,CAEXC,QAAS,ycACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrB5kB,SAZiC,SAYxBP,GACPN,KAAK+nB,gBACL3oB,EAAEgmB,WAAWnlB,UAAUY,SAASX,KAAKF,KAAMM,IAG7C+lB,eAjBiC,WAkB/B,IAAMf,EAAOtlB,KAAKuB,aAElBnC,EAAEgmB,WAAWnlB,UAAUomB,eAAenmB,KAAKF,MAE3CZ,EAAE8B,SAASR,GAAG4kB,EAAM,CAClB9jB,UAAWxB,KAAKgoB,WAChBC,QAASjoB,KAAKkoB,aACbloB,MAEHZ,EAAE8B,SAASR,GAAGsR,SAAU,eAAgBhS,KAAKkoB,YAAaloB,OAG5DsmB,iBA9BiC,WA+B/B,IAAMhB,EAAOtlB,KAAKuB,aAElBnC,EAAEgmB,WAAWnlB,UAAUomB,eAAenmB,KAAKF,MAE3CZ,EAAE8B,SAASH,IAAIukB,EAAM,CACnB9jB,UAAWxB,KAAKgoB,WAChBC,QAASjoB,KAAKkoB,aACbloB,MAEHZ,EAAE8B,SAASH,IAAIiR,SAAU,eAAgBhS,KAAKkoB,YAAaloB,OAI7D0lB,cA5CiC,aA+CjCI,aA/CiC,WAgD/B9lB,KAAKke,UAAUle,KAAK2lB,SAASxiB,UAAUnD,KAAK4lB,WAG9CoC,WAnDiC,SAmDtBhnB,GACT,IAAMiH,EAAKjI,KAAK2lB,SAAS1M,YACnBnX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAK2lB,SAASnlB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAK2lB,SAASzb,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAK2lB,WAA/D,CAIA,IAAMwC,EAAarmB,EAAKyY,aAExBva,KAAKooB,OAAS7G,WAAWniB,EAAEwD,MAAK,WAC1B5C,KAAKqoB,UAAYC,aAAatoB,KAAKqoB,UAElCroB,KAAKuoB,aAGRJ,EAAWtmB,WAAU,SAASwX,GACxBrZ,OAASqZ,GAAUA,EAAOmP,kBAHhCxoB,KAAKyoB,YAAY,UAAW,CAACC,WAAW,IAO1C1oB,KAAK2oB,gBACJ3oB,MAAO,OAGZkoB,YA7EiC,SA6ErBlnB,GACV,IAAMiH,EAAKjI,KAAK2lB,SAAS1M,YACnBnX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAK2lB,SAASnlB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAK2lB,SAASzb,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAK2lB,WAA/D,CAIA,IAAMwC,EAAarmB,EAAKyY,aAEpBvZ,EAAE4nB,gBAAkB5W,UACtBmW,EAAWtmB,WAAU,SAASwX,GAC5BA,EAAOmP,kBAIPxoB,KAAKooB,QAAUE,aAAatoB,KAAKooB,QAErCpoB,KAAKqoB,SAAW9G,WAAWniB,EAAEwD,MAAK,WAChC5C,KAAKwoB,iBACJxoB,MAAO,SAIdZ,EAAEob,WAAa,SAAShY,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAEyoB,WAAWrlB,EAASwT,EAAKxW,K,eCvGxCJ,EAAEypB,aAAezpB,EAAEgmB,WAAW7lB,OAAO,CACnCC,QAAS,CACP6lB,KAAM,SACNC,KAAMlmB,EAAEkmB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZmC,WAajC,IAAMljB,EAAUxC,KAAK2lB,SACfK,EAAexjB,EAAQW,UAAUnD,KAAK4lB,SACtCK,EAAYjmB,KAAK6lB,YACjBlZ,EAAQ3M,KAAKqnB,oBAAoBrB,EAAcC,GAMrDzjB,EAAQ6K,SAASV,EAAO,QAG1BmZ,aAzBmC,WA0BjC9lB,KAAKke,UAAUle,KAAK2lB,SAASxiB,UAAUnD,KAAK4lB,aAIhDxmB,EAAEgb,aAAe,SAAS5X,EAASwT,EAAKxW,GACtC,OAAO,IAAIJ,EAAEypB,aAAarmB,EAASwT,EAAKxW,K,eC/B1CJ,EAAE0pB,YAAc1pB,EAAEgmB,WAAW7lB,OAAO,CAClCC,QAAS,CACP6lB,KAAM,QACNC,KAAMlmB,EAAEkmB,KAAK,CACXC,QAEE,iiEACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZkC,WAahC,IAAIljB,EAAUxC,KAAK2lB,SACfrlB,EAAMkC,EAAQjC,KACdoG,EAAenE,EAAQmE,aACvBqf,EAAexjB,EAAQW,UAAUnD,KAAK4lB,SACtCK,EAAYjmB,KAAK6lB,YACjBha,EAAQ7L,KAAK2mB,wBAAwBX,EAAcC,GAOlDtf,IAAgBA,EAAe,IACpC,IAAM8gB,EAAUnnB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDwkB,EAAUrnB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACrD+L,EAAI7D,KAAKuc,IAAIH,EAAQxjB,EAAI0jB,EAAQ1jB,GACjCmL,EAAI/D,KAAKuc,IAAIH,EAAQvjB,EAAIyjB,EAAQzjB,GACpBmH,KAAK6b,KAAKhY,EAAIA,EAAIE,EAAIA,GAExBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAMhBrJ,EAAQoJ,QAAQ,IAIpBka,aA3CkC,WA4ChC9lB,KAAKke,UAAUle,KAAK2lB,SAASxiB,UAAUnD,KAAK4lB,aAIhDxmB,EAAE4a,YAAc,SAASxX,EAASwT,EAAKxW,GACrC,OAAO,IAAIJ,EAAE0pB,YAAYtmB,EAASwT,EAAKxW,K,eCjDzCJ,EAAE0Q,iBAAmB1Q,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBiI,iBAAmB,GAEtCvT,EAAEsL,iBAAiBqe,WAAa3pB,EAAEugB,SAASqJ,QAAQzpB,OAAO,IAE1DH,EAAE0Q,iBAAiB2F,WAAa,SAASjW,GACvC,OAAO,IAAIJ,EAAEsL,iBAAiBqe,WAAWvpB,IAI3CJ,EAAEC,sBAAsBsQ,aAAY,WAElC3P,KAAKipB,QAAU,CACb7pB,EAAE8W,aACF9W,EAAEyV,aACFzV,EAAEiV,WACFjV,EAAE8U,cAIJ9U,EAAEC,sBAAsBoT,KAAKgH,MAAQ,CACnCoB,KAAMzb,EAAEiV,WACR6U,OAAQ9pB,EAAE8U,cAGZ,IAAMkQ,EAAIpkB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAKipB,QAE7DjpB,KAAKQ,QAAUpB,EAAEmH,sBAAsBzE,KAAK9B,KAAM,CAACiT,QAASmR,Q,cC7B9DhlB,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEsL,iBAAiBC,SAAWvL,EAAEugB,SAASwJ,MAAM5pB,OAAO,CACpDC,QAAS,CACP4pB,OAAQ,CAAC,GAAI,KAGftpB,WALoD,SAKzC0K,EAAQhL,GACjBJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEugB,SAASwJ,MAAMlpB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQhL,IAG3D0Q,SAVoD,SAU3C5P,EAAKwa,GACZ9a,KAAKM,IAAMA,EACXN,KAAK8a,GAAKA,GAGZuO,MAfoD,WAgBlD,GAAIrpB,KAAKspB,IACP,OAAOtpB,KAAKspB,IAAIC,UAIpBnL,UArBoD,SAqB1CoL,GAER,IADA,IAAMH,EAAQrpB,KAAKqpB,QACVrmB,EAAI,EAAGA,EAAIqmB,EAAMxkB,OAAQ7B,IAAK,CACrC,IAAIymB,EAAOJ,EAAMtT,KAAK/S,GAAGumB,SAAS,GAClC,GAAInqB,EAAE6C,QAAQQ,SAASgnB,EAAMD,GAE3B,OADAC,EAAKC,QACED,EAGX,OAAO,KAIXrqB,EAAE0Q,iBAAiBmO,SAAW,SAASzT,EAAQhL,GAC7C,OAAO,IAAIJ,EAAEsL,iBAAiBC,SAASH,EAAQhL,IAGjDJ,EAAEoH,wBAAwBmJ,aAAY,WAEpC3P,KAAKipB,QAAU,CACb7pB,EAAEogB,WACFpgB,EAAE2kB,YACF3kB,EAAEigB,cACFjgB,EAAEwkB,aACFxkB,EAAE4iB,iBACF5iB,EAAEiV,WACFjV,EAAEkd,cACFld,EAAEujB,gBACFvjB,EAAEqd,aACFrd,EAAE8W,aACF9W,EAAEyV,cAIJzV,EAAEsL,iBAAiB+H,KAAKgH,MAAQ,CAC9BpY,KAAMjC,EAAEogB,WACR3T,MAAOzM,EAAE2kB,YACTrJ,QAAStb,EAAEigB,cACX1E,OAAQvb,EAAEwkB,aACVhJ,WAAYxb,EAAE4iB,iBACdnH,KAAMzb,EAAEiV,YAGV,IAAM+P,EAAIpkB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAKipB,QAE7DjpB,KAAKQ,QAAUpB,EAAE0Q,iBAAiBhO,KAAK9B,KAAM,CAACiT,QAASmR,Q,eCrEzDhlB,EAAEuqB,QAAUvqB,EAAEwqB,MAAMrqB,OAAO,CAEzBsqB,KAAM,2CAENC,SAAU,GAEVzX,OANyB,WAQvB,OADArS,KAAK+pB,WAAW/pB,KAAK8pB,UACd9pB,KAAK6pB,MAGdE,WAXyB,SAWdC,GACThqB,KAAK6pB,MAAQG,M,eCdjB5qB,EAAEgT,iBAAmBhT,EAAEuqB,QAAQpqB,OAAO,CAEpCuqB,SAEI,8T,eCHN1qB,EAAEkhB,eAAiBlhB,EAAEuqB,QAAQpqB,OAAO,CAClCuqB,SACE,uqT,eCHJ1qB,EAAEsQ,IAAIua,aAAa,CACjBC,cAAc,EACdC,SAAS,IAOX/qB,EAAEsQ,IAAI0a,aAAehrB,EAAEsQ,IAAI2a,QAAQ9qB,OAAO,CACxCO,WADwC,SAC7BQ,GACTN,KAAKO,KAAOD,EACZN,KAAKoQ,WAAa9P,EAAI8P,WACtBpQ,KAAKsqB,MAAQhqB,EAAIiqB,OAAOC,YACxBxqB,KAAKyqB,mBAAqB,EAC1BnqB,EAAII,GAAG,SAAUV,KAAK0qB,SAAU1qB,OAGlCkQ,SATwC,WAUtC9Q,EAAE8B,SAASR,GAAGV,KAAKoQ,WAAY,YAAapQ,KAAK2qB,aAAc3qB,OAGjE8Q,YAbwC,WActC1R,EAAE8B,SAASH,IAAIf,KAAKoQ,WAAY,YAAapQ,KAAK2qB,aAAc3qB,OAGlE4qB,MAjBwC,WAkBtC,OAAO5qB,KAAK6qB,QAGdH,SArBwC,WAsBtCtrB,EAAE6C,QAAQ8O,OAAO/Q,KAAKsqB,cACftqB,KAAKsqB,OAGdQ,YA1BwC,WA2BtC9qB,KAAKyqB,mBAAqB,EAC1BzqB,KAAK6qB,QAAS,GAGhBE,yBA/BwC,WAgCN,IAA5B/qB,KAAKyqB,qBACPnC,aAAatoB,KAAKyqB,oBAClBzqB,KAAKyqB,mBAAqB,IAI9BE,aAtCwC,SAsC3B3pB,GACX,IAAKA,EAAE8B,UAAyB,IAAZ9B,EAAEgqB,OAA4B,IAAbhqB,EAAEyQ,OACrC,OAAO,EAKTzR,KAAK+qB,2BACL/qB,KAAK8qB,cAEL1rB,EAAE6C,QAAQgpB,uBACV7rB,EAAE6C,QAAQipB,mBAEVlrB,KAAKmrB,YAAcnrB,KAAKO,KAAK6qB,2BAA2BpqB,GAExD5B,EAAE8B,SAASR,GAAGsR,SAAU,CACtBtQ,YAAatC,EAAE8B,SAASod,KACxB+M,UAAWrrB,KAAKsrB,aAChBrD,QAASjoB,KAAKurB,YACbvrB,OAGLsrB,aA5DwC,SA4D3BtqB,GACNhB,KAAK6qB,SACR7qB,KAAK6qB,QAAS,EAEd7qB,KAAKwrB,KAAOpsB,EAAE6C,QAAQgP,OAAO,MAAO,mBAAoBjR,KAAKoQ,YAC7DhR,EAAE6C,QAAQ4N,SAAS7P,KAAKoQ,WAAY,qBAEpCpQ,KAAKO,KAAKsI,KAAK,iBAGjB7I,KAAKyrB,OAASzrB,KAAKO,KAAK6qB,2BAA2BpqB,GAEnDhB,KAAK0rB,QAAUtsB,EAAEusB,OAAO3rB,KAAKmrB,YAAanrB,KAAKyrB,QAC/C,IAAIG,EAAO5rB,KAAK0rB,QAAQG,UAExBzsB,EAAE6C,QAAQ6pB,YAAY9rB,KAAKwrB,KAAMxrB,KAAK0rB,QAAQK,KAE9C/rB,KAAKwrB,KAAKrf,MAAMpG,MAAQ6lB,EAAK3nB,EAAI,KACjCjE,KAAKwrB,KAAKrf,MAAMnG,OAAS4lB,EAAK1nB,EAAI,MAGpC8nB,QAjFwC,WAkFlChsB,KAAK6qB,SACPzrB,EAAE6C,QAAQ8O,OAAO/Q,KAAKwrB,MACtBpsB,EAAE6C,QAAQ8R,YAAY/T,KAAKoQ,WAAY,sBAGzChR,EAAE6C,QAAQgqB,sBACV7sB,EAAE6C,QAAQiqB,kBAEV9sB,EAAE8B,SAASH,IAAIiR,SAAU,CACvBtQ,YAAatC,EAAE8B,SAASod,KACxB+M,UAAWrrB,KAAKsrB,aAChBrD,QAASjoB,KAAKurB,YACbvrB,OAGLurB,WAjGwC,SAiG7BvqB,GACT,IAAgB,IAAZA,EAAEgqB,OAA4B,IAAbhqB,EAAEyQ,UAIvBzR,KAAKgsB,UAEAhsB,KAAK6qB,QAAV,CAIA7qB,KAAK+qB,2BACL/qB,KAAKyqB,mBAAqBlJ,WACtBniB,EAAE6N,KAAKrK,KAAK5C,KAAK8qB,YAAa9qB,MAAO,GAEzC,IAAI2rB,EAASvsB,EAAE4K,aACXhK,KAAKO,KAAK4rB,uBAAuBnsB,KAAK0rB,QAAQU,iBAC9CpsB,KAAKO,KAAK4rB,uBAAuBnsB,KAAK0rB,QAAQW,gBAG9CthB,EAAO/K,KAAKO,KAAKuJ,UACjBT,EAASrJ,KAAKO,KAAKgJ,YAGvBoiB,EAAS3rB,KAAKO,KAAKmU,8BAA8BiX,EAAQ5gB,EAAM1B,GAE/DrJ,KAAKO,KAAKsI,KAAK,gBAAiB,CAAC2L,iBAAkBmX,QAIvDvsB,EAAEsQ,IAAIC,YAAY,aAAc,eAAgBvQ,EAAEsQ,IAAI0a,e,eCxItDhrB,EAAEsQ,IAAIua,aAAa,CACjBrhB,mBAAmB,IAOrBxJ,EAAEsQ,IAAI4c,kBAAoBltB,EAAEsQ,IAAI6c,gBAAgBhtB,OAAO,CACrDkB,OADqD,WAEnD,IAAIH,EAAMN,KAAKO,KAEf,OAAIP,KAAKyT,WAGLnT,EAAIqI,gBAAgB3G,WACtB1B,EAAIqI,gBAAgB7H,UAGtBd,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAVuBlQ,MAc9Bc,QAlBqD,WAmBnD,OAAKd,KAAKyT,UAEVzT,KAAKyT,UAAW,EAChBzT,KAAK8Q,cAEE9Q,MALsBA,MAQ/BwsB,cA3BqD,SA2BvCxrB,GACZ,IAAIV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGPD,GAAMA,EAAG9Q,WAEbxC,EAAImsB,UAAY,EAChBzsB,KAAKO,KAAKmsB,cAAgBnL,YAAW,WACd,IAAjBjhB,EAAImsB,UACNnsB,EAAImsB,SAAW,EACfnsB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQslB,OAAU/Y,GAAMA,EAAGgZ,mBAAmBC,kBAClDvsB,EAAIuI,KAAK,cAGZ,OAGLikB,eAhDqD,WAiDnD,IAAIxsB,EAAMN,KAAKO,KACXwsB,EAASzsB,EAAI0sB,QAEjBzL,YAAW,WACTjhB,EAAImsB,SAAW,EACfnE,aAAahoB,EAAIosB,iBAChB,GAEEK,IAE0B,IAA3BA,EAAOvtB,QAAQ8Y,SACjByU,EAAOvtB,QAAQ8Y,QAAU,EACzByU,EAAO9R,WAAW,KAElB8R,EAAOvtB,QAAQ8Y,QAAU,EACzByU,EAAO9R,WAAW,QAKxB7b,EAAEsQ,IAAIC,YAAY,aAAc,oBAAqBvQ,EAAEsQ,IAAI4c,oB,eCxE3DltB,EAAEsQ,IAAI6c,gBAAgBU,QAAQ,CAC5B/c,SAD4B,WAE1BlQ,KAAKO,KAAKG,GAAG,CACXgpB,MAAO1pB,KAAKwsB,cACZtT,SAAUlZ,KAAK8sB,gBACd9sB,OAGL8Q,YAR4B,WAS1B9Q,KAAKO,KAAKQ,IAAI,CACZ2oB,MAAO1pB,KAAKwsB,cACZtT,SAAUlZ,KAAK8sB,gBACd9sB,OAGLS,OAf4B,WAgB1B,OAAIT,KAAKyT,UAGLzT,KAAKO,KAAKqI,mBACR5I,KAAKO,KAAKqI,kBAAkB5G,YAMlChC,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAbuBlQ,MAiB9Bc,QAjC4B,WAkC1B,OAAKd,KAAKyT,UAGVzT,KAAKO,KAAKsI,KAAK,kBAEf7I,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAPsBA,MAU/BwsB,cA5C4B,SA4CdxrB,GACZ,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGTD,GAAMA,EAAG9Q,WAEbxC,EAAImsB,UAAY,EAChBzsB,KAAKO,KAAKmsB,cAAgBnL,YAAW,WACd,IAAjBjhB,EAAImsB,UACNnsB,EAAImsB,SAAW,EACfnsB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQslB,OAAU/Y,GAAMA,EAAGgZ,mBAAmBC,kBAIlDvsB,EAAI4sB,cAActZ,EAAI,WAAY,CAACtT,MAGtC,OAGLwsB,eApE4B,SAoEb9rB,GACb,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAOb,GALA0N,YAAW,WACTjhB,EAAImsB,SAAW,EACfnE,aAAahoB,EAAIosB,iBAChB,IAEE9Y,EAAM,OAAO,EAElB,IAAMuZ,EAAU7sB,EAAIwJ,UACdxG,EAAQhD,EAAId,QAAQ4tB,UACpBriB,EAAO6I,EAAG9Q,SAAWqqB,EAAU7pB,EAAQ6pB,EAAU7pB,EAEnB,WAAhChD,EAAId,QAAQmJ,gBACdrI,EAAI+sB,QAAQtiB,GAEZzK,EAAIgtB,cAActsB,EAAEusB,eAAgBxiB,O,eC1F1C3L,EAAEsQ,IAAIud,QAAQ,CAEZR,SAAU,EAEVe,gBAJY,SAIInX,GAiCd,OA9BAA,EAAOrW,KAAKytB,cAAgBruB,EAAEG,OAAO,CACnCmuB,cAAe,GACfC,QAAS,GACTC,cAAe,GACfC,QAAS,EACTd,QAAQ,EACRe,aAAc,EACdllB,mBAAmB,GAClByN,IAEO0W,SACR/sB,KAAKytB,cAAgBruB,EAAEG,OAAOS,KAAKytB,cAAe,CAChDK,aAAczX,EAAK0W,OAAS,OAAI1X,EAChCzM,oBAAmByN,EAAK0W,aAAgB1X,KAI5CrV,KAAK+tB,cAAgB3uB,EAAE4uB,UAnBX,oDAmB0B,CACpCL,QAAStX,EAAKsX,QACdC,cAAevX,EAAKuX,cACpBC,QAASxX,EAAKwX,QACdvV,QAASjC,EAAKqX,gBACb9b,MAAM5R,MAELqW,EAAK0W,OAAU/sB,KAAKiuB,WAAW5X,GAGjCrW,KAAK4I,uBAAoByM,EAGpBrV,MAGTiuB,WAxCY,SAwCD5X,GAsBT,OAnB0B,IAAtBA,EAAKyX,cAA4C,IAAtBzX,EAAKyX,eAClCzX,EAAKyX,aAAe,GAGtB9tB,KAAKgtB,QAAU5tB,EAAE4uB,UANL,8EAMoB,CAC9BE,YAAa,0OACbC,WAAY,OACZrG,aAAa,EACbxP,QAASjC,EAAKyX,aACdH,QAAStX,EAAKsX,QACdC,cAAevX,EAAKuX,cACpBC,QAASxX,EAAKwX,QACdO,IAAK,QACJxc,MAAM5R,MAELA,KAAKytB,cAAc7kB,mBACrB5I,KAAK4I,kBAAkBnI,SAGlBT,QAKXZ,EAAEsQ,IAAIC,aAAY,WAChB3P,KAAK4I,kBAAkB9H,UACvBd,KAAK2I,gBAAgBlI,a,eCtEvBrB,EAAE6C,QAAU7C,EAAEG,OAAOH,EAAE6C,QAAS,CAC9B7B,gBAD8B,SACdiuB,GACdruB,KAAKyO,YAAc4f,GAGrB7f,gBAL8B,SAKd8f,GACd,IAAMrgB,EAAO7O,EAAEiI,QAAQ6G,UAAY9O,EAAEiI,QAAQknB,SAAWnvB,EAAEiI,QAAQmnB,KAS5DtiB,EAAS,CACboiB,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjBA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjB,EAAG,EAAG,EAAG,EACTA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,IAGbG,EAAMxgB,EAAO,YAAc/B,EAAOyC,KAAK,KAAO,IAAM,GAQ1D,OANKV,GACH+I,QACKC,IAAI,uFAIJwX,GAGTvsB,YAjC8B,SAiClBgQ,EAAIL,GACd,IAAM3O,EAAI2O,EACV,OAAO7R,KAAKyC,SAASyP,EAAIhP,GACvBlD,KAAK+T,YAAY7B,EAAIhP,GAAKlD,KAAK6P,SAASqC,EAAIhP,IAGhD4Z,cAvC8B,WAwC5B,OAAO1D,OAAOsV,QAAQ1uB,KAAKyO,YAAYkgB,qBAGzC3Z,eA3C8B,SA2CfD,GACb,GAAU,IAANA,EAAW,OAAO/U,KAAK8c,gBAE3B,IACI8R,EADEngB,EAAczO,KAAKyO,YAAYogB,qBASrC,OALED,EADyB,mBAAhBngB,EACIA,EAAYsG,GAEZtG,EAGR2K,OAAOsV,QAAQE,O,cCvD1BxvB,EAAEkS,SAAW,CAMXL,OANW,SAMJ6d,GAKL,MAJI,KAAKC,KAAKD,KACZA,EAAMA,EAAIE,QAAQ,KAAM,KAIxB,4BAA8BF,EAA9B,mDACuBA,EADvB,kBAMJ/M,cAlBW,SAkBG/Q,EAAWie,GACvB,IAAMpQ,EAAM7N,EAAUiB,cAAc,OAEhC4M,GACFzf,EAAE6C,QAAQ4N,SAASgP,EAAKoQ,IAK5BjQ,YA3BW,SA2BChO,EAAWke,EAAMC,GACtB,KAAKJ,KAAKG,KACbA,EAAO,IAAMA,GAEV,KAAKH,KAAKI,KACbA,EAAO,IAAMA,GAGf,IAAM3Q,EAAMxN,EAAUiB,cAAc,OACpC,GAAIuM,EAAK,CACP,IAAM4Q,EAAU5Q,EAAI6Q,aAAa,gBAAkBH,EAAOC,EAAOD,EAEjE,OADA1Q,EAAItN,aAAa,aAAcke,GACxBA,EAET,OAAO,GAGTtd,YA5CW,SA4CCd,EAAWse,EAAQC,GAC7B,IAAMH,EAAUpe,EAAUqe,aAAa,WAAaC,EAASC,EAASD,EAMtE,OAJAte,EAAUE,aAAa,QAASke,GAC5Bpe,EAAUwe,aAAa,eACzBxe,EAAUE,aAAa,aAAcke,GAEhCA,K,eCnDXhwB,EAAE+G,UAAY,CAEZC,cAFY,SAEE5D,GACZ,IAAIlC,EAAMkC,EAAQjC,KAMlB,OAAe,IAJJD,EACN8C,mBAAmBZ,EAAQW,UAAU,IACrCssB,WAAWnvB,EAAI8C,mBAAmBZ,EAAQW,UAAU,KAEnCX,EAAQjB,aAAawE,S,eCT/C3G,EAAEmQ,WAAa,CAGbmgB,IAHa,SAGTpB,GACF,MAAO,CACLA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAK/DqB,OAZa,SAYNvL,EAAGrF,GACR,IACI/b,EADEE,EAAI,GAGV,IAAKF,EAAI,EAAGA,EAAI,EAAGA,IACjB,IAAK,IAAIiM,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAG1B,IAFA,IAAI2gB,EAAM,EAEDnkB,EAAI,EAAGA,EAAI,EAAGA,IACrBmkB,GAAOxL,EAAE,EAAEphB,EAAIyI,GAAGsT,EAAE,EAAEtT,EAAIwD,GAG5B/L,EAAE,EAAEF,EAAIiM,GAAK2gB,EAIjB,OAAO1sB,GAIT2sB,OAhCa,SAgCNvB,EAAGwB,GACR,MAAO,CACLxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAC/BxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAC/BxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,KAKnCC,OAzCa,SAyCN9L,EAAGqK,GAGR,IAFA,IAAMpiB,EAAS,GAENlJ,EAAI,EAAGwf,EAAI8L,EAAEzpB,OAAQ7B,EAAIwf,EAAGxf,IACnCkJ,EAAOtG,KAAKqe,EAAEqK,EAAEtrB,IAGlB,OAAOkJ,GAGT8jB,cAnDa,SAmDCC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACxC,IAAMlC,EAAI,CACR2B,EAAIE,EAAIE,EACRH,EAAIE,EAAIE,EACR,EAAG,EAAG,GAEJR,EAAI1wB,EAAEmQ,WAAWsgB,OAAOzwB,EAAEmQ,WAAWmgB,IAAIpB,GAAI,CAACiC,EAAIC,EAAI,IAE1D,OAAOpxB,EAAEmQ,WAAWogB,OAAOrB,EAAG,CAC5BwB,EAAE,GAAI,EAAG,EACT,EAAGA,EAAE,GAAI,EACT,EAAG,EAAGA,EAAE,MAIZxmB,QAlEa,SAkELglB,EAAGrqB,EAAGC,GACZ,IAAI4rB,EAAI1wB,EAAEmQ,WAAWsgB,OAAOvB,EAAG,CAACrqB,EAAGC,EAAG,IAEtC,MAAO,CAAC4rB,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,KAG5BtgB,oBAxEa,SAyETihB,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,GAEjB,IAAIvN,EAAI7kB,EAAEmQ,WAAWygB,cAAcS,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClE/R,EAAIngB,EAAEmQ,WAAWygB,cAAcW,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClElD,EAAIlvB,EAAEmQ,WAAWogB,OAAOpQ,EAAGngB,EAAEmQ,WAAWmgB,IAAIzL,IAKhD,OAAO7kB,EAAEmQ,WAAWwgB,OAAO,EAAEzB,EAAE,GAAIA,M,eCrFvClvB,EAAEwN,SAAW,CAEXC,UAFW,SAED5I,EAAGC,GAAiB,IAAd+H,EAAc,uDAAP,MACrB,MAAgB,QAATA,EACHjM,KAAKgN,iBAAiB3B,KAAKkc,MAAMrjB,EAAGD,IACpCoH,KAAKkc,MAAMrjB,EAAGD,IAGpB+I,iBARW,SAQML,GACf,OAAgB,IAARA,EAAetB,KAAKyB,IAG9BS,iBAZW,SAYMZ,GACf,OAAQA,EAAQtB,KAAKyB,GAAM,O,eCb/B1N,EAAEe,MAAQ,CACRC,gBADQ,WAEN,IAAMqO,EAAc,CAClByQ,YAAa,eACbE,aAAc,gBACdE,aAAc,gBACdG,UAAW,aACXoB,YAAa,eACbC,aAAc,gBACdpC,aAAc,gBACdC,UAAW,aACXsD,gBAAiB,oBACjBG,eAAgB,kBAChBK,SAAU,YACVC,WAAY,cACZE,gBAAiB,oBACjBC,qBAAsB,yBACtBc,aAAc,wBACdE,YAAa,eACbG,WAAY,cACZE,aAAc,iBACdC,YAAa,gBACbE,aAAc,gBACdsK,mBACE,qEACFE,qBACE,wEAGJ,GAAK7uB,KAAKR,QAAQiP,YAIhB,IAAK,IAAMkF,KAAOlF,EACXzO,KAAKR,QAAQiP,YAAY8O,eAAe5J,KAC3C3T,KAAKR,QAAQiP,YAAYkF,GAAOlF,EAAYkF,SALhD3T,KAAKR,QAAQiP,YAAcA,EAU7BrP,EAAE6C,QAAQ7B,gBAAgBJ,KAAKR,QAAQiP,cAGzC0E,aA3CQ,SA2CKkb,EAAK1a,EAAK8d,GAErB,MADY,CAAC9d,EAAK8d,GACPhtB,QAAO,SAAS4pB,EAAK5iB,GAC9B,OAAO4iB,GAAOA,EAAI5iB,KACjB4iB,OC7CPqD,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,O","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\n\nvar OpacitiesSubAction = L.Toolbar2.Action.extend({\n initialize(map, myAction) {\n map = map;\n myAction = myAction;\n\n L.Toolbar2.Action.prototype.initialize.call(this);\n },\n addHooks() {\n this.myAction.disable();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n /* html: '', */\n html: 'x',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n\n },\n },\n addHooks: () => {\n this._overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","OpacitiesSubAction","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n /* html: '', */\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n },\n },\n addHooks: () => {\n console.warn('EXECUTAT');\n this.overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 54b0ce134..6f6958449 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -27,7 +27,7 @@ L.OpacitiesAction = L.EditAction.extend({ // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; - L.setOptions(this, options); + // L.setOptions(this, options); L.EditAction.prototype.initialize.call(this, map, overlay, options); }, @@ -135,14 +135,14 @@ var Cancel = L.EditAction.extend({ options: { toolbarIcon: { /* html: '', */ - html: 'x', + html: '✖', tooltip: 'Cancel', className: 'leaflet-toolbar-icon-vertical', - }, }, addHooks: () => { - this._overlay.disable(); + console.warn('EXECUTAT'); + this.overlay.disable(); this.disable(); }, }); From 00ec95fc46b6bd49bcea41ff04d948bdea9a5432 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 09:33:25 +0200 Subject: [PATCH 30/73] sub-menu test 19 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 59201fdae..eed226bbe 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[s,a,n,o,i,e,r]}),L.EditAction.prototype.initialize.call(this,t,l,c)},addHooks:function(){}});var e=L.EditAction.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),r=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"}},addHooks:function(){console.warn("EXECUTAT"),t.overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[s,a,n,o,i,e,r]}),L.EditAction.prototype.initialize.call(this,t,l,c)},addHooks:function(){}});var e=L.EditAction.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),r=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"}},addHooks:function(){console.warn("EXECUTAT"),t.overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 b4ac35b1c..500bbd9b3 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n /* html: '', */\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n },\n },\n addHooks: () => {\n console.warn('EXECUTAT');\n this.overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n /* html: '', */\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n },\n },\n addHooks: () => {\n console.warn('EXECUTAT');\n this.overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 6f6958449..7faa810df 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -135,7 +135,7 @@ var Cancel = L.EditAction.extend({ options: { toolbarIcon: { /* html: '', */ - html: '✖', + html: '✖', tooltip: 'Cancel', className: 'leaflet-toolbar-icon-vertical', }, From eeb9192e2625cad6f4050550a37147f84dfd8111 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 09:39:50 +0200 Subject: [PATCH 31/73] sub-menu test 20 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 6 ++++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index eed226bbe..44b831ef6 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[s,a,n,o,i,e,r]}),L.EditAction.prototype.initialize.call(this,t,l,c)},addHooks:function(){}});var e=L.EditAction.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.1;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),r=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"}},addHooks:function(){console.warn("EXECUTAT"),t.overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[s,a,n,o,i,e,r]}),L.EditAction.prototype.initialize.call(this,t,l,c)},addHooks:function(){}});var e=L.EditAction.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),r=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size: 1.25rem;"}},addHooks:function(){var e=t._overlay;console.warn(e),t.overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 500bbd9b3..f8d7da40a 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n /* html: '', */\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n },\n },\n addHooks: () => {\n console.warn('EXECUTAT');\n this.overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n /* html: '', */\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size: 1.25rem;',\n },\n },\n addHooks: () => {\n const edit = this._overlay;\n console.warn(edit);\n this.overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 7faa810df..2ec60d8d2 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -47,7 +47,7 @@ var OpacitiesBar0 = L.EditAction.extend({ html: 0, tooltip: 'Opacity 0%', className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:0.1;', + style: 'background-color:#000; opacity:0.01;', }, }, addHooks: () => { @@ -138,10 +138,12 @@ var Cancel = L.EditAction.extend({ html: '✖', tooltip: 'Cancel', className: 'leaflet-toolbar-icon-vertical', + style: 'font-size: 1.25rem;', }, }, addHooks: () => { - console.warn('EXECUTAT'); + const edit = this._overlay; + console.warn(edit); this.overlay.disable(); this.disable(); }, From d1a5928c45ecabe81f42b7575efce976775c3357 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 09:52:31 +0200 Subject: [PATCH 32/73] sub-menu test 21 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 29 +++++++++++++++------------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 44b831ef6..39ed11aa2 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[s,a,n,o,i,e,r]}),L.EditAction.prototype.initialize.call(this,t,l,c)},addHooks:function(){}});var e=L.EditAction.extend({options:{toolbarIcon:{html:0,tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:20,tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:40,tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:60,tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:80,tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:100,tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),r=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size: 1.25rem;"}},addHooks:function(){var e=t._overlay;console.warn(e),t.overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[s,a,n,o,i,e,r]}),L.EditAction.prototype.initialize.call(this,t,l,c)},addHooks:function(){}});var e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),r=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!1,html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){console.warn(t),t.overlay.disable(),t._overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 f8d7da40a..96b99249b 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 0,\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 20,\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 40,\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 60,\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 80,\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: 100,\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n /* html: '', */\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size: 1.25rem;',\n },\n },\n addHooks: () => {\n const edit = this._overlay;\n console.warn(edit);\n this.overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: false,\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks: () => {\n console.warn(this);\n this.overlay.disable();\n this._overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 2ec60d8d2..21988d2be 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -44,7 +44,7 @@ L.OpacitiesAction = L.EditAction.extend({ var OpacitiesBar0 = L.EditAction.extend({ options: { toolbarIcon: { - html: 0, + html: '', tooltip: 'Opacity 0%', className: 'leaflet-toolbar-icon-vertical', style: 'background-color:#000; opacity:0.01;', @@ -59,7 +59,7 @@ var OpacitiesBar0 = L.EditAction.extend({ var OpacitiesBar20 = L.EditAction.extend({ options: { toolbarIcon: { - html: 20, + html: '', tooltip: 'Opacity 20%', className: 'leaflet-toolbar-icon-vertical', style: 'background-color:#000; opacity:0.2;', @@ -74,7 +74,7 @@ var OpacitiesBar20 = L.EditAction.extend({ var OpacitiesBar40 = L.EditAction.extend({ options: { toolbarIcon: { - html: 40, + html: '', tooltip: 'Opacity 40%', className: 'leaflet-toolbar-icon-vertical', style: 'background-color:#000; opacity:0.4;', @@ -89,7 +89,7 @@ var OpacitiesBar40 = L.EditAction.extend({ var OpacitiesBar60 = L.EditAction.extend({ options: { toolbarIcon: { - html: 60, + html: '', tooltip: 'Opacity 60%', className: 'leaflet-toolbar-icon-vertical', style: 'background-color:#000; opacity:0.6;', @@ -104,7 +104,7 @@ var OpacitiesBar60 = L.EditAction.extend({ var OpacitiesBar80 = L.EditAction.extend({ options: { toolbarIcon: { - html: 80, + html: '', tooltip: 'Opacity 80%', className: 'leaflet-toolbar-icon-vertical', style: 'background-color:#000; opacity:0.8;', @@ -119,7 +119,7 @@ var OpacitiesBar80 = L.EditAction.extend({ var OpacitiesBar100 = L.EditAction.extend({ options: { toolbarIcon: { - html: 100, + html: '', tooltip: 'Opacity 100%', className: 'leaflet-toolbar-icon-vertical', style: 'background-color:#000; opacity:1;', @@ -132,19 +132,22 @@ var OpacitiesBar100 = L.EditAction.extend({ }); var Cancel = L.EditAction.extend({ - options: { - toolbarIcon: { - /* html: '', */ + initialize(map, overlay, options) { + options = options || {}; + options.toolbarIcon = { + svg: false, html: '✖', tooltip: 'Cancel', className: 'leaflet-toolbar-icon-vertical', - style: 'font-size: 1.25rem;', - }, + }; + + L.EditAction.prototype.initialize.call(this, map, overlay, options); }, + addHooks: () => { - const edit = this._overlay; - console.warn(edit); + console.warn(this); this.overlay.disable(); + this._overlay.disable(); this.disable(); }, }); From 3dd4b18b5fdfc634e5c39042b80fa0b49ebdd1b8 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 09:59:32 +0200 Subject: [PATCH 33/73] sub-menu test 22 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 39ed11aa2..68aaf7499 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[s,a,n,o,i,e,r]}),L.EditAction.prototype.initialize.call(this,t,l,c)},addHooks:function(){}});var e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),r=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!1,html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){console.warn(t),t.overlay.disable(),t._overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[s,a,n,o,i,e,r]}),L.EditAction.prototype.initialize.call(this,t,l,c)},addHooks:function(){}});var e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),r=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!1,html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var e=t._overlay;console.warn(e),e.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 96b99249b..1681b7f65 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: false,\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks: () => {\n console.warn(this);\n this.overlay.disable();\n this._overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: false,\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks: () => {\n const overlay = this._overlay;\n console.warn(overlay);\n overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 21988d2be..4325841df 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -145,9 +145,9 @@ var Cancel = L.EditAction.extend({ }, addHooks: () => { - console.warn(this); - this.overlay.disable(); - this._overlay.disable(); + const overlay = this._overlay; + console.warn(overlay); + overlay.disable(); this.disable(); }, }); From 9feff27b37821238f9dae645919df2272654b614 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 10:13:46 +0200 Subject: [PATCH 34/73] sub-menu test 23 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 11 +++++------ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 68aaf7499..d9dbdbc54 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this;L.OpacitiesAction=L.EditAction.extend({initialize:function(t,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[s,a,n,o,i,e,r]}),L.EditAction.prototype.initialize.call(this,t,l,c)},addHooks:function(){}});var e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),r=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!1,html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var e=t._overlay;console.warn(e),e.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this,e=L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),r=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),l=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){console.warn(e),opacitiesAction_overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 1681b7f65..91f891663 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar Cancel = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: false,\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks: () => {\n const overlay = this._overlay;\n console.warn(overlay);\n overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","const opacitiesAction = L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks: () => {\n console.warn(opacitiesAction);\n opacitiesAction_overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","opacitiesAction","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","opacitiesAction_overlay","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 4325841df..140d950de 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -1,4 +1,4 @@ -L.OpacitiesAction = L.EditAction.extend({ +const opacitiesAction = L.OpacitiesAction = L.EditAction.extend({ initialize(map, overlay, options) { const edit = overlay.editing; const mode = edit._mode; @@ -131,23 +131,22 @@ var OpacitiesBar100 = L.EditAction.extend({ }, }); -var Cancel = L.EditAction.extend({ +const Cancel = L.EditAction.extend({ initialize(map, overlay, options) { options = options || {}; options.toolbarIcon = { - svg: false, html: '✖', tooltip: 'Cancel', className: 'leaflet-toolbar-icon-vertical', + style: 'font-size:1.25rem;', }; L.EditAction.prototype.initialize.call(this, map, overlay, options); }, addHooks: () => { - const overlay = this._overlay; - console.warn(overlay); - overlay.disable(); + console.warn(opacitiesAction); + opacitiesAction_overlay.disable(); this.disable(); }, }); From 571bbf9b1da86fdaaded2bbd01c935b21d6817f1 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 10:19:47 +0200 Subject: [PATCH 35/73] sub-menu test 24 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index d9dbdbc54..0eacada58 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this,e=L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),r=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),l=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){console.warn(e),opacitiesAction_overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this,e=L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),r=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),l=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){console.warn(e),e._overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 91f891663..17e67370f 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","const opacitiesAction = L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks: () => {\n console.warn(opacitiesAction);\n opacitiesAction_overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","opacitiesAction","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","opacitiesAction_overlay","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","const opacitiesAction = L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks: () => {\n console.warn(opacitiesAction);\n opacitiesAction._overlay.disable();\n // opacitiesAction.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","opacitiesAction","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 140d950de..d62ed2328 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -146,7 +146,8 @@ const Cancel = L.EditAction.extend({ addHooks: () => { console.warn(opacitiesAction); - opacitiesAction_overlay.disable(); + opacitiesAction._overlay.disable(); + // opacitiesAction.disable(); this.disable(); }, }); From 6b5efcd8330f91c31ebb6d74df036d65ecd4e2f8 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 19:27:48 +0200 Subject: [PATCH 36/73] sub-menu test 25 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/EditAction.js | 1 - src/edit/actions/OpacitiesAction.js | 16 ++++++++++------ 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 0eacada58..53c87fd9b 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),console.warn(JSON.stringify(n)),n.style&&this._link.setAttribute("style",n.style),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===s._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=this,e=L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),r=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),l=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){console.warn(e),e._overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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=this,e=L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),r=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),l=L.EditAction.extend({initialize:function(t,e,i){console.log(t),console.log(e),console.log(t),(i=i||{}).toolbarIcon={html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){console.warn(e),e._overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 17e67370f..b4f24beaa 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 console.warn(JSON.stringify(iconOptions));\n if (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","const opacitiesAction = L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nvar OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nvar OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks: () => {\n console.warn(opacitiesAction);\n opacitiesAction._overlay.disable();\n // opacitiesAction.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","warn","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","opacitiesAction","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","const opacitiesAction = L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n initialize(map, overlay, options) {\n console.log(map);\n console.log(overlay);\n console.log(map);\n\n options = options || {};\n options.toolbarIcon = {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks: () => {\n console.warn(opacitiesAction);\n opacitiesAction._overlay.disable();\n // opacitiesAction.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","opacitiesAction","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","warn","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/EditAction.js b/src/edit/actions/EditAction.js index e667047f8..e1aefb612 100644 --- a/src/edit/actions/EditAction.js +++ b/src/edit/actions/EditAction.js @@ -40,7 +40,6 @@ L.EditAction = L.Toolbar2.Action.extend({ this._link.setAttribute('href', '#'); this._link.setAttribute('title', iconOptions.tooltip); - console.warn(JSON.stringify(iconOptions)); if (iconOptions.style) { this._link.setAttribute('style', iconOptions.style); }; this._link.setAttribute('role', 'button'); diff --git a/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index d62ed2328..dfafc745f 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -41,7 +41,7 @@ const opacitiesAction = L.OpacitiesAction = L.EditAction.extend({ }, }); -var OpacitiesBar0 = L.EditAction.extend({ +const OpacitiesBar0 = L.EditAction.extend({ options: { toolbarIcon: { html: '', @@ -56,7 +56,7 @@ var OpacitiesBar0 = L.EditAction.extend({ }, }); -var OpacitiesBar20 = L.EditAction.extend({ +const OpacitiesBar20 = L.EditAction.extend({ options: { toolbarIcon: { html: '', @@ -71,7 +71,7 @@ var OpacitiesBar20 = L.EditAction.extend({ }, }); -var OpacitiesBar40 = L.EditAction.extend({ +const OpacitiesBar40 = L.EditAction.extend({ options: { toolbarIcon: { html: '', @@ -86,7 +86,7 @@ var OpacitiesBar40 = L.EditAction.extend({ }, }); -var OpacitiesBar60 = L.EditAction.extend({ +const OpacitiesBar60 = L.EditAction.extend({ options: { toolbarIcon: { html: '', @@ -101,7 +101,7 @@ var OpacitiesBar60 = L.EditAction.extend({ }, }); -var OpacitiesBar80 = L.EditAction.extend({ +const OpacitiesBar80 = L.EditAction.extend({ options: { toolbarIcon: { html: '', @@ -116,7 +116,7 @@ var OpacitiesBar80 = L.EditAction.extend({ }, }); -var OpacitiesBar100 = L.EditAction.extend({ +const OpacitiesBar100 = L.EditAction.extend({ options: { toolbarIcon: { html: '', @@ -133,6 +133,10 @@ var OpacitiesBar100 = L.EditAction.extend({ const Cancel = L.EditAction.extend({ initialize(map, overlay, options) { + console.log(map); + console.log(overlay); + console.log(map); + options = options || {}; options.toolbarIcon = { html: '✖', From e3b57ebbfe871598f31d42431450f731a1b0e888 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 19:45:02 +0200 Subject: [PATCH 37/73] sub-menu test 26 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 12 ++++++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 53c87fd9b..4b9875684 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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=this,e=L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,g=e.editing,m=g._mode;g._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),r=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),l=L.EditAction.extend({initialize:function(t,e,i){console.log(t),console.log(e),console.log(t),(i=i||{}).toolbarIcon={html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){console.warn(e),e._overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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=this,e=L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,m=e.editing,g=m._mode;m._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===g?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),r=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),l=L.EditAction.extend({initialize:function(t,e,i){this.map=t,this.myAction=e,(i=i||{}).toolbarIcon={html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){console.warn(t),console.warn(t._overlay),console.warn(t.overlay),console.warn(l.overlay),console.warn(t.myAction),e._overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 b4f24beaa..6a648f227 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","const opacitiesAction = L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n initialize(map, overlay, options) {\n console.log(map);\n console.log(overlay);\n console.log(map);\n\n options = options || {};\n options.toolbarIcon = {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks: () => {\n console.warn(opacitiesAction);\n opacitiesAction._overlay.disable();\n // opacitiesAction.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","opacitiesAction","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","warn","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":"kCAAAA,EAAEC,sBAAwBD,EAAEE,aAAaC,OAAO,CAC9CC,QAAS,CACPC,UAAU,EACVC,WAAY,CACVC,eAAgB,iCAChBC,UAAW,0BACXC,UAAW,kCAIfC,WAV8C,SAUnCN,GACTJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEE,aAAaW,UAAUH,WAAWI,KAAKF,KAAMR,GAC/CJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAKP,SAAWO,KAAKR,QAAQC,UAG/BY,MAlB8C,SAkBxCC,GACJlB,EAAEE,aAAaW,UAAUI,MAAMH,KAAKF,KAAMM,GAE1CN,KAAKO,KAAOD,EAERN,KAAKP,UAAYO,KAAKQ,QAAQC,SAMlCT,KAAKU,GAAG,WAAYV,KAAKW,WAAYX,MACrCA,KAAKU,GAAG,cAAeV,KAAKY,cAAeZ,OAG7Ca,SAjC8C,WAkCxCb,KAAKQ,SAAWR,KAAKQ,QAAQM,UAEjCd,KAAKe,IAAI,WAAYf,KAAKW,WAAYX,MACtCA,KAAKe,IAAI,cAAef,KAAKY,cAAeZ,OAG9CW,WAxC8C,SAwCnCK,GACT,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASR,GAAGO,EAAO,CACnBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASR,GAAGO,EAAMM,aAAc,CAChCC,UAAWxB,KAAKyB,gBAEhBC,YAAa1B,KAAK2B,uBACjB3B,OAGLY,cAvD8C,SAuDhCI,GACZ,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASH,IAAIE,EAAO,CACpBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASH,IAAIE,EAAMM,aAAc,CACjCC,UAAWxB,KAAKyB,gBAChBC,YAAa1B,KAAK2B,uBACjB3B,OAGL2B,sBArE8C,SAqExBX,GAAG,WAClBhB,KAAKP,WAEVuB,EAAEY,iBAEF5B,KAAK6B,WAAU,SAACZ,GACd,IAAMa,EAAOb,EAAMT,QACfS,EAAMM,eAAiBP,EAAEe,QAAUD,EAAKE,YAC1C5C,EAAE6C,QAAQC,YAAYjB,EAAMM,aAAc,aACtC,EAAKY,gBACPlB,EAAMmB,WACN,EAAK5B,QAAQ6B,eAEb,EAAK7B,QAAQ8B,uBAMrBC,YAxF8C,SAwFlCC,GACV,OAAOpD,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAGlDY,aA5F8C,WA8F5C,OADiBnC,KAAK0C,YACNC,KAAK3C,KAAKuC,YAAYK,KAAK5C,QAG7C6C,iBAjG8C,SAiG7B7B,EAAGC,GACdD,EAAE8B,UAEA7B,EAAMT,QAAQwB,WAChB5C,EAAE6C,QAAQC,YAAYlB,EAAEe,OAAQ,aAIhC/B,KAAKmC,eAAkBlB,EAAMmB,WAC1BpC,KAAKQ,QAAQ8B,kBAGtBb,gBA7G8C,SA6G9BT,GAAG,WACZhB,KAAKP,WAEVO,KAAK6B,WAAU,SAACZ,GACVA,EAAMM,eAAiBP,EAAEe,OAC3Bd,EAAMmB,WAEN,EAAKS,iBAAiB7B,EAAGC,MAIzBD,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCI,mBA3H8C,SA2H3BJ,GACjB,IAEIgC,EAFER,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAGZP,KAAKuC,YAAYC,IAEtBxC,KAAK6B,WAAU,SAACZ,GAGd,IAFAA,EAAMgC,iBAAmB,GACzBhC,EAAMmB,WACDY,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACtB,IAAIE,EAAIjC,EAAMkC,UAAUH,GACxB/B,EAAMgC,iBAAiBD,GAAK1C,EAAI8C,mBAAmBF,QAKzD5B,cA5I8C,SA4IhCN,GACZ,IAAMwB,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAEjB,GAAKP,KAAKuC,YAAYC,GAAtB,CAEA,IAAMa,EAAU/C,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDG,EAAQd,EAAQS,iBAAiB,GAAGM,SAASF,GAEnDrD,KAAKwD,4BAA4BF,EAAOd,KAG1CiB,UAxJ8C,WAwJlC,WAGV,OAFiBzD,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAQ,EAAKrB,YAAYtB,IAAmB,SAAT0C,MAIvCE,QAjK8C,SAiKtCrB,GAAS,WAGf,OAFiBxC,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAO3C,IAAUuB,GAAW,EAAKD,YAAYtB,IAAmB,SAAT0C,MAI3DH,4BA1K8C,SA0KlBF,EAAOd,GACjC,IAEIQ,EAFEc,EAAe9D,KAAK6D,QAAQrB,GAC5BuB,EAAI,IAAI3E,EAAE4E,eAAe,GAAIV,EAAMW,EAAG,GAAIX,EAAMY,GAGtDJ,EAAaK,SAAQ,SAAClD,GACpB,IAAImD,EAAc,GAClB,IAAKpB,EAAI,EAAGA,EAAI,EAAGA,IACjBoB,EAAYpB,GAAKe,EAAEM,UAAUpD,EAAMgC,iBAAiBD,IAEtD/B,EAAMqD,qBAAqBF,OAI/BG,kBAxL8C,SAwL5BC,GAIhB,OAHeA,EAAKC,QAAO,SAASC,EAAKC,GACvC,OAAOD,EAAMC,EAAIC,eAChB,GACaJ,EAAKK,QAGvBC,mBA/L8C,WAgM5C,IAAMC,EAAO,CACbA,OAAc,IA4Bd,OA1BA/E,KAAK6B,WAAU,SAASZ,GACtB,GAAIjB,KAAKuC,YAAYtB,GAAQ,CAC3B,IAAI+D,EAAW/D,EAAMgE,OAAOC,IAAIC,MAAM,KAClCC,EAAWJ,EAASA,EAASH,OAAO,GACpCQ,EAAKpE,EAAMqE,aACXC,EAAU,CACZ,CAACC,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,MAE9BX,EAAKY,OAAOC,KAAK,CACfC,GAAI7F,KAAK8F,WAAW7E,GACpBiE,IAAKjE,EAAMgE,OAAOC,IAClBa,MAAO9E,EAAMgE,OAAOc,MACpBC,OAAQ/E,EAAMgE,OAAOe,OACrBC,gBAAiBb,EACjBc,MAAOX,EACPX,aAAcxF,EAAE+G,UAAUC,cAAcnF,QAG3CjB,MAEH+E,EAAKY,OAASZ,EAAKY,OAAOU,UAC1BtB,EAAKuB,iBAAmBtG,KAAKuE,kBAAkBQ,EAAKY,QAE7CZ,KAIX3F,EAAEmH,sBAAwB,SAASV,EAAIrG,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBwG,EAAIrG,K,eClOzCJ,EAAEoH,wBAA0BpH,EAAEqH,aAAalH,OAAO,CAEhDC,QAAS,CACPwG,OAAQ,IACRU,aAAa,EAEbC,aAAc,GACdlH,UAAU,EACVkE,KAAM,UACNiD,UAAU,GAGZ9G,WAZgD,SAYrC+G,EAAKrH,GACdJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAK2G,aAAe3G,KAAKR,QAAQmH,aACjC3G,KAAKP,SAAWO,KAAKR,QAAQC,SAC7BO,KAAK8G,UAAY9G,KAAKR,QAAQoH,SAC9B5G,KAAK+G,KAAOF,EACZ7G,KAAKgH,SAAW,IAGlB3G,MAvBgD,SAuB1CC,GAAK,WACTN,KAAKO,KAAOD,EACPN,KAAKuB,cAAgBvB,KAAKiH,aAE/B3G,EAAII,GAAG,YAAaV,KAAKkH,OAAQlH,MAE7BA,KAAKR,QAAQ+F,UACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QACzBjF,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAYV,KAAKuH,aAAcvH,OAK1CZ,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAAQ,WAIvC,GAHA,EAAKiG,UAAUC,YAAY,EAAKlG,cAChC,EAAKmG,uBAED,EAAKlI,QAAQwH,SAAU,CACzB,IAAMW,EAAQ,EAAKnI,QAAQwH,SAASY,IAAM,MAAQ,MAClD,EAAKC,SAAS,EAAKrI,QAAQwH,SAASW,GAAQA,QAE5C,EAAKX,SAAW,CAACY,IAAK,EAAGE,IAAK,GAC9B,EAAKZ,SAIF,EAAKC,UACJ7G,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAY,EAAK6G,aAAc,GAK1C,IAAMQ,EAAe,EAAKC,cACtBD,GACF,EAAKE,GAAKF,EAAaG,OAAOC,KAAKJ,GAAc,IAC7C,EAAKE,GAAGxI,UAAY,EAAKe,QAAQC,WAEjC,EAAKhB,UAAY,EAAKe,QAAQC,SAClC,EAAKwH,GAAK,SAId7I,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACvDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MAMGM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAG7CA,KAAK6I,KAAK,QAGZhI,SArFgD,SAqFvCP,GACPlB,EAAE8B,SAASH,IAAIf,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACxDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MACHZ,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAExCA,KAAKQ,SAAWR,KAAKQ,QAAQM,UACjCd,KAAK6I,KAAK,UAEVzJ,EAAEqH,aAAaxG,UAAUY,SAASX,KAAKF,KAAMM,IAG/CoH,qBApGgD,WAqG9C,IAAMpH,EAAMN,KAAKO,KACXuI,EAAqB1J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,SAC3DyH,EAAsB5J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,UAC5D0H,EACFC,SAASJ,GAAsBI,SAASF,GACtCG,EAAcnJ,KAAKR,QAAQwG,OAC3BoD,EAAaF,SAASD,EAAcE,GACpCE,EAAS/I,EAAIgJ,QAAQhJ,EAAIiJ,aACzBC,EAASpK,EAAEqK,MAAML,EAAYD,GAAaO,SAAS,GACrD1J,KAAKR,QAAQ+F,QACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QAE7BvF,KAAKmH,SAAW,CACd7G,EAAIqJ,UAAUN,EAAO9F,SAASiG,IAC9BlJ,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIJ,KAI7BxJ,KAAK6J,mBAAqB,CACxB,OAAUR,EACV,OAAUG,EACV,KAAQlJ,EAAIwJ,WAGd9J,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,gBAGrCoD,aAlIgD,SAkInC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKoC,YAIvCkG,sBAvIgD,WAwI9C,IAAMhI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAC5CZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKoC,SAAUpC,OAGnDwI,qBA7IgD,WA8I9C,IAAMlI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAC3CZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKoC,SAAUpC,OAGpDkK,WAnJgD,WAoJ9C,OAAOlK,KAAK8G,WAGd1E,SAvJgD,WAwJ9C,IAAMN,EAAO9B,KAAKQ,QAClB,GAAKsB,EAAKE,UAOV,OALAF,EAAKQ,iBACLR,EAAKqI,eAELnK,KAAK8G,WAAY,EACjB9G,KAAK6I,KAAK,YACH7I,MAGToI,OAnKgD,SAmKzCpH,GACL,IAAMc,EAAO9B,KAAKQ,QACZyH,EAAKjI,KAAKiI,GAEhB,GAAKnG,EAAKE,UAAV,CAYA,GAXIhB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,GAGpChB,KAAKoK,wBAELpK,KAAK8G,WAAY,EACjBhF,EAAKO,cACLP,EAAKuI,eACLrK,KAAK6I,KAAK,WAGNZ,IAAMA,EAAG9F,eAKb,OAAOnC,KAJLA,KAAKoC,aAOTgI,sBA3LgD,WA4L9CpK,KAAKO,KAAKsB,WAAU,SAACZ,GACfA,aAAiB7B,EAAEoH,yBACrBvF,EAAMmB,eAKZkI,UAnMgD,SAmMtCC,EAAQC,GAChB,IAAM1I,EAAO9B,KAAKQ,QAalB,OAXAR,KAAKmH,SAASoD,GAAUC,EAExBxK,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT8K,sBApNgD,SAoN1BC,EAAMR,EAAQjK,GAClC,OAAIA,EAAId,QAAQwL,IAAIC,QAAU7L,EAAE8L,IAAID,SAKrB,IAATF,GACFI,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI,EACrCkH,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,GAAK,MAEzCiH,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI6G,EAAO,EAC5CK,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,EAAImH,KAAKC,IAAI,EAAGP,IAAS,KAEvDI,GAAcC,GATtB,IAAID,EACAC,GAYRG,WArOgD,SAqOrCC,GACT,IAAMlL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAGR,IAAK,IAAIyI,KAAKD,EACZ,GAAIxL,KAAK8K,sBAAsBC,EAAMS,EAAUC,GAAInL,GAIjD,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAI4C,KAAKD,EACZxL,KAAKmH,SAASnE,GAAKwI,EAAUC,GAC7BzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGTsE,qBAtQgD,SAsQ3BoH,GACnB,IAAMpL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAER,IAAK,IAAIyI,KAAKC,EAAW,CACvB,IAAMnB,EAASjK,EAAIqL,mBAAmBD,EAAUD,IAEhD,GAAIzL,KAAK8K,sBAAsBC,EAAMR,EAAQjK,GAI3C,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAI4C,KAAKC,EACZ1L,KAAKmH,SAASnE,GAAK1C,EAAIqL,mBAAmBD,EAAUD,IACpDzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT4L,QAxSgD,SAwSxCC,GACN,IAEI7I,EACAe,EAHEzD,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAG5BuC,EAAgB,GAEpB,GAAc,IAAVD,EAAJ,CAEA,IAAK7I,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EACCgJ,QAAQtJ,KAAKmD,UAAUH,IACvBO,SAAS8F,GACT0C,WAAWF,GACXjC,IAAIP,GACTyC,EAAc9I,GAAK1C,EAAIqJ,UAAU5F,GAKnC,OAFA/D,KAAKuL,WAAWO,GAET9L,OAGTgM,SA/TgD,WA+TzB,IAAdC,EAAc,uDAAP,MACRC,EAASlM,KAAKuB,aAAa4K,MAAM/M,EAAE6C,QAAQmK,WAC5CjH,MAAM,YAAY,GAClBkH,MAAM,GAAI,GACVlH,MAAM,KAELmH,EAAQJ,EAAO,GACfK,EAAQL,EAAO,GACfM,EAAQN,EAAO,GACfO,EAAQP,EAAO,GAEfQ,EAAcJ,EAAQG,EAAQF,EAAQC,EAExCG,EAAQvN,EAAEwN,SAASC,UAAUP,EAAOC,EAAO,OAU/C,OARIG,EAAc,IAChBC,GAASA,EAAQ,EAAItB,KAAKyB,IAAMzB,KAAKyB,IAGnCH,EAAQ,IACVA,EAAQ,EAAItB,KAAKyB,GAAKH,GAGR,QAATV,EACHZ,KAAK0B,MAAM3N,EAAEwN,SAASI,iBAAiBL,IACvCvN,EAAE6N,KAAKC,UAAUP,EAAO,IAG9B9E,SA3VgD,SA2VvC8E,GAAqB,IAAdV,EAAc,uDAAP,MACfkB,EAAenN,KAAKgM,SAASC,GAC7BmB,EAAkBT,EAAQQ,EAGhC,OAFAnN,KAAKqN,SAASD,EAAiBnB,GAExBjM,MAGTqN,SAnWgD,SAmWvCV,GAAqB,IAIxB3J,EACAe,EACAuJ,EANUrB,EAAc,uDAAP,MACf3L,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAC5BhE,EAAU,GASd,IAJa,QAAT0G,IACFU,EAAQvN,EAAEwN,SAASW,iBAAiBZ,IAGjC3J,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAAS8F,GAC5CiE,EAAIlO,EAAEqK,MACF4B,KAAKmC,IAAIb,GAAS5I,EAAEE,EAAIoH,KAAKoC,IAAId,GAAS5I,EAAEG,EAC5CmH,KAAKoC,IAAId,GAAS5I,EAAEE,EAAIoH,KAAKmC,IAAIb,GAAS5I,EAAEG,GAEhDqB,EAAQvC,GAAK1C,EAAIqJ,UAAU2D,EAAE1D,IAAIP,IAKnC,OAFArJ,KAAKuL,WAAWhG,GAETvF,MAGT0N,OA7XgD,SA6XzCC,EAAaC,GAClB,IACI5K,EACAe,EAFEzD,EAAMN,KAAKO,KAGbsN,EAAe,GACbvK,EAAQhD,EAAIgJ,QAAQqE,GAAapK,SAASjD,EAAIgJ,QAAQsE,IAE5D,IAAK5K,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAASD,GAC5CuK,EAAa7K,GAAK1C,EAAIqJ,UAAU5F,GAGlC/D,KAAKuL,WAAWsC,IAGlBC,QA5YgD,WAwZ9C,IAXA,IAAMxN,EAAMN,KAAKO,KACX8I,EAASrJ,KAAK6J,mBAAmBR,OACjCG,EAASxJ,KAAK6J,mBAAmBL,OACjCuB,EAAO/K,KAAK6J,mBAAmBkB,KAC/BxF,EAAU,CACd8D,EAAO9F,SAASiG,GAChBH,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,IACrCmF,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,IACrCmF,EAAOO,IAAIJ,IAGJxG,EAAI,EAAGA,EAAI,EAAGA,IAChB1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,GAAMgD,OAAO/N,KAAKmD,UAAUH,KACzDhD,KAAKsK,UAAUtH,EAAG1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,IAOhD,OAHA/K,KAAK6K,QAAS,EACd7K,KAAK6I,KAAK,WAEH7I,MAKTgO,oBAtagD,SAsa5BvE,GAOlB,IAAMwE,EAAO7O,EAAEiI,QAAQ6G,SAEjBC,GAASF,EAAO,KAAO,IAAM,IAEnC,MAHa,aAAeA,EAAO,KAAO,IAAM,IAGlCxE,EAAMxF,EAAI,MAAQwF,EAAMvF,EAAI,KAAOiK,GAGnDjH,OApbgD,WAqb9C,IAAM5G,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACb6B,EAAqBhE,EAAEwD,KAAKtC,EAAI8C,mBAAoB9C,GACpD+N,EAAkBrO,KACnBsO,8BAA8BlL,GAC7BC,EAAUD,EAAmBpD,KAAKmD,UAAU,IAC5CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,KAK5DP,EAAMjC,MAAM/M,EAAE6C,QAAQmK,UAAY,WAAa,QAE/CpM,KAAKgH,SAASY,IAAM5H,KAAKgM,WACzBhM,KAAKgH,SAASc,IAAM9H,KAAKgM,SAAS,QASpCzE,aAldgD,SAkdnCqH,GACX,IAAMtO,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACbsN,EAAwB,SAASrE,GACrC,OAAOlK,EAAIwO,uBAAuBtE,EAAQoE,EAAM7D,KAAM6D,EAAMvF,SAExDgF,EAAkBrO,KAAKsO,8BACzBO,GAEExL,EAAUwL,EAAsB7O,KAAKmD,UAAU,IAC/CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,MAG9DrJ,WAregD,WAse9C,OAAOtF,KAAKmH,UAGdhE,UAzegD,SAyetCH,GACR,OAAOhD,KAAKmH,SAASnE,IAIvBuG,UA9egD,WA+e9C,IAAMjJ,EAAMN,KAAKO,KACXkE,EAASzE,KAAKsF,aAAab,QAAO,SAASsK,EAAKxE,GACpD,OAAOwE,EAAInF,IAAItJ,EAAIgJ,QAAQiB,MAC1BnL,EAAEqK,MAAM,EAAG,IACd,OAAOnJ,EAAIqJ,UAAUlF,EAAOiF,SAAS,KAGvC4E,8BAtfgD,SAsflBU,GAI5B,IAIIC,EAJEzF,EAASwF,EAAkBhP,KAAKmD,UAAU,IAC1C+L,EAAIlP,KAAKuB,aAAa4N,aAAe,IACrCC,EAAIpP,KAAKuB,aAAa8N,cAAgB,IACxCnM,EAAI,GAGR,IAAK+L,EAAI,EAAGA,EAAI,EAAGA,IACjB/L,EAAE0C,KAAKoJ,EAAkBhP,KAAKmD,UAAU8L,IAAIK,UAAU9F,IAcxD,OAAOpK,EAAEmQ,WAAWC,oBAChB,EAAG,EAAGtM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAG,EAAGhM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnB,EAAGkL,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAGE,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,MAK3B9E,EAAEqQ,wBAA0B,SAAS5J,EAAIrG,GACvC,OAAO,IAAIJ,EAAEoH,wBAAwBX,EAAIrG,IAG3CJ,EAAEsQ,IAAIC,aAAY,WACXvQ,EAAE6C,QAAQQ,SAASzC,KAAK4P,eAAgB,QAC3CxQ,EAAE6C,QAAQ4N,SAAS7P,KAAK4P,eAAgB,W,0BC9hB5CxQ,EAAE6C,QAAU7C,EAAE6C,SAAW,GACzB7C,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBqF,UAAY3Q,EAAE4Q,QAAQzQ,OAAO,CAE9CC,QAAS,CACPyQ,SAAU,YAGZnQ,WAN8C,SAMnCQ,EAAKd,GACdQ,KAAKO,KAAOD,EACZlB,EAAEW,WAAWC,KAAMR,IAGrB0Q,SAX8C,WAYvClQ,KAAKmQ,aACRnQ,KAAKoQ,WAAapQ,KAAKqQ,kBACvBrQ,KAAKsQ,eAAiBtQ,KAAKuQ,QAC3BvQ,KAAKwQ,SAAWxQ,KAAKyQ,gBACrBzQ,KAAK0Q,WAAW1Q,KAAKoQ,WAAYpQ,KAAKsQ,eAAgBtQ,KAAKwQ,UAE3DpR,EAAE8B,SAASR,GAAGV,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE7DZ,EAAE8B,SAAS0P,wBAAwB5Q,KAAKoQ,YACxChR,EAAE8B,SAAS2P,yBAAyB7Q,KAAKoQ,cAI7CU,YAzB8C,WA0BxC9Q,KAAKmQ,aACP/Q,EAAE8B,SAASH,IAAIf,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE9DZ,EAAE6C,QAAQ8O,OAAO/Q,KAAKwQ,UACtBpR,EAAE6C,QAAQ8O,OAAO/Q,KAAKsQ,gBACtBlR,EAAE6C,QAAQ8O,OAAO/Q,KAAKoQ,YACtBpQ,KAAKmQ,YAAa,IAItBE,gBApC8C,WAqC5C,IAAMW,EAAY5R,EAAE6C,QAAQgP,OAAO,MAAO,sBAC1CD,EAAUE,aAAa,KAAM,iBAE7B,IAAMC,EAAU/R,EAAE6C,QAAQgP,OAAO,KAAM,WAGvC,OAFAD,EAAUvJ,YAAY0J,GAEfH,GAGTP,cA9C8C,WA+C5C,IAAMW,EAAUhS,EAAE6C,QAAQgP,OAAO,IAAK,IAUtC,OATAG,EAAQC,UAAYjS,EAAEkS,SAASL,OAAO,iBAEtCG,EAAQF,aAAa,KAAM,oBAC3BE,EAAQF,aAAa,OAAQ,KAC7BE,EAAQF,aAAa,QAAS,eAE9BE,EAAQF,aAAa,OAAQ,UAC7BE,EAAQF,aAAa,aAAc,eAE5BE,GAGTb,MA5D8C,WA6D5C,IAAMgB,EAAOnS,EAAE6C,QAAQgP,OAAO,MAAO,IAIrC,OAHAM,EAAKL,aAAa,KAAM,qBACxBK,EAAKpF,MAAMqF,QAAU,OAEdD,GAGTb,WApE8C,SAoEnCM,EAAWO,EAAME,GAC1BzR,KAAKmQ,WAAa/Q,EAAEsS,QAAQ,CAACzB,SAAUjQ,KAAKR,QAAQyQ,WAEpDjQ,KAAKmQ,WAAW9P,MAAQ,WAuBtB,OAtBA2Q,EAAUvJ,YAAY8J,GACtBA,EAAKI,mBACD,YACA,k3CAkBJX,EAAUvJ,YAAYgK,GACfT,GAGThR,KAAKmQ,WAAWyB,MAAM5R,KAAKO,OAG7BoQ,iBApG8C,SAoG7B3P,GACfA,EAAEY,iBAEF5B,KAAKoQ,WAAWyB,UACgB,kCAA9B7R,KAAKoQ,WAAWyB,UACd,qCACA,gCAGJ7R,KAAKsQ,eAAenE,MAAMqF,QACc,SAAtCxR,KAAKsQ,eAAenE,MAAMqF,QAAqB,QAAU,OAG3DxR,KAAKwQ,SAASa,UACgB,UAA5BrR,KAAKwQ,SAASa,UACZjS,EAAEkS,SAASL,OAAO,iBAClB,QAGJ7R,EAAEkS,SAASQ,YAAY9R,KAAKwQ,SAAU,cAAe,eACrDpR,EAAE6C,QAAQC,YAAYlC,KAAKwQ,SAAU,eAGvCuB,eA3H8C,WA4H5C,IAAIC,SAASC,cAAc,sBAA3B,CAEA,IAAMC,EAAK9S,EAAE6C,QAAQgP,OAAO,MAAO,IACnCiB,EAAGrM,GAAK,oBACRqM,EAAGhB,aAAa,SAAU,UAE1BlR,KAAKmS,UAAW,IAAI/S,EAAEgT,kBAAmBC,SACzCH,EAAGb,UAAYrR,KAAKmS,SAEpBH,SAASC,cAAc,8BAA8BxK,YAAYyK,OAIrE9S,EAAEsL,iBAAiBqF,UAAUJ,aAAY,WACvCvQ,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACrClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACvClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GAAK,EAC5C,EAGgD,IAA9ClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,IAAalT,EAAEiI,QAAQkL,SAChE,EAAK9R,SACL,EAAKsR,qBAIT3S,EAAE0Q,iBAAiB0C,UAAY,SAAClS,EAAKd,GACnC,OAAO,IAAIJ,EAAEsL,iBAAiBqF,UAAUzP,EAAKd,K,eC3J/CJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEC,sBAAsBoT,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CAC9CC,QAAS,CACPkT,OAAQtT,EAAE0Q,iBAAiB6C,kBAG7B7S,WAL8C,SAKnC8S,EAAOpT,GAChBQ,KAAK6S,OAASD,EACd5S,KAAK8S,YAAcF,EAAMpT,QAAQE,WAEjCN,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB6C,iBAAiBI,OAAS,iBAG/C7C,SAd8C,WAe5C,IACM5P,EADQN,KAAK6S,OACDtS,KAElBP,KAAKgT,YAAchT,KAAKR,QAAQyT,QAChCjT,KAAKkT,YACD9T,EAAEwD,KAAKxD,EAAEe,MAAMgT,aAAanT,KAAM,cAAe,aACjDA,KAAKoT,YAAapT,MAEtBZ,EAAE8B,SAASR,GAAGsR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE9CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAGlDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQC,aAG/CqQ,YAxC8C,WAyC5C,IACMxQ,EADQN,KAAK6S,OACDtS,KAElBnB,EAAE8B,SAASH,IAAIiR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE/CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MAGnDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAKsT,gBACLtT,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQM,cAG/CL,OA9D8C,WAiE5C,OAFAT,KAAKyT,UAAW,EAChBzT,KAAKkQ,WACElQ,MAGTc,QApE8C,WAuE5C,OAFAd,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAGTqT,WA1E8C,SA0EnCrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KAExB3T,KAAK0T,IAEN1T,KAAK6S,OAAO1Q,gBACdnC,KAAK0T,GAAaxT,KAAKF,OAI3B0I,aArF8C,SAqFjC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKsT,cAActS,IAIrDsH,sBA1F8C,WA2F5C,IAAMhI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MACjDZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKsT,cAAetT,OAGxDwI,qBAhG8C,WAiG5C,IAAMlI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAChDZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKsT,cAAetT,OAGzDsT,cAtG8C,SAsGhCtS,GACZ,IAAI4S,EAEA5S,IAAK4S,EAAK5S,EAAE6S,eAKZD,IAAOA,EAAG9Q,UAAY8Q,EAAG7R,kBAAkB+R,oBAI/C9T,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB7B,EAAE6C,QAAQ8R,YAAY9S,EAAMM,aAAc,aAC1CN,EAAMmB,cAGRpC,KAAKsC,iBAEDtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCgT,aA5H8C,WA4H/B,WACRhU,KAAKiU,QAAQ7U,EAAE8U,eAEpBlU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd2T,UAELlT,EAAMmB,gBAKZgS,WAzI8C,WAyIjC,WACNpU,KAAKiU,QAAQ7U,EAAEiV,aAEpBrU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd8T,QAELlV,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CiS,gBAtJ8C,SAsJ9BxS,GAAG,WACXuT,EAAMvT,EAAEwT,iBACRlU,EAAMN,KAAK6S,OAAOtS,KAExBP,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB,IAAMa,EAAOb,EAAMT,QAEfS,EAAMiJ,cAAgBjJ,EAAMmB,WAEhC,IAAM2I,EAAOzK,EAAIwJ,UACXT,EAAS/I,EAAIiJ,YACfkL,EAAYrV,EAAE4K,aAAa/I,EAAMkC,UAAU,GAAIlC,EAAMkC,UAAU,IAEnEsR,EAAYnU,EAAIoU,8BAA8BD,EAAW1J,EAAM1B,GAC3DkL,EAAII,WAAWF,IAAc3S,EAAKE,YAC/B,EAAKyI,SAAW,EAAKpI,cAC1BjD,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CqT,aA3K8C,SA2KjC5T,GAAG,WACd,GAAKhB,KAAKiU,QAAQ7U,EAAEyV,cAApB,CAEA,IAAMC,EAAiB9U,KAAK6S,OAAOpP,YAC7BsR,EAAID,EAAejQ,OAEf,IAANkQ,IAEW3V,EAAE6C,QAAQ+S,eAAeD,KAGtCD,EAAe3Q,SAAQ,SAAClD,GACtB,EAAK4R,OAAOoC,YAAYhU,MAErBjB,KAAK6S,OAAO1Q,gBACfnC,KAAKsC,kBAILtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,MAGtCkU,aAjM8C,WAkMvClV,KAAKmV,mBACRnV,KAAK8S,YAAYsC,gBAAaC,GAGhCC,cAActV,KAAKuV,iBAGrBlT,YAzM8C,WA0M5C,IAAMuQ,EAAQ5S,KAAK6S,OACbvS,EAAMsS,EAAMrS,KAEdqS,EAAMpT,QAAQgW,iBAAmBxV,KAAKyK,UAE1CzK,KAAKyK,QAAUrL,EAAE0Q,iBAAiB2F,WAAW,CAC3CxC,QAASjT,KAAKgT,YACd/C,SAAU,YACT2B,MAAMtR,EAAKsS,KAGhBtQ,eArN8C,WAsN5C,IAAMhC,EAAMN,KAAK6S,OAAOtS,KACxB,IAAIP,KAAKyK,QAIP,OAAO,EAHPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,GAMnBwJ,QA/N8C,SA+NtCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDE,QAnO8C,SAmOtCF,GAMN,MALwB,yBAApBA,EAAMG,WAAyC7V,KAAKiU,QAAQyB,KAC9D1V,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,eAEArC,MAGT8V,WA5O8C,SA4OnCJ,GAAO,WAWhB,OAVA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,OAAI,EAAKhD,YAAYgD,KAASN,IAC5B,EAAKpT,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,eACE,MAKJrC,MAGToT,YA1P8C,WA0PhC,WACZ,GAAKpT,KAAKiU,QAAQ7U,EAAE8W,cAEpB,OAAO,IAAIC,SAAQ,SAACC,GAClB,IAGIxW,EAHEyW,EAAO,EAAKvD,YAClBuD,EAAKD,QAAUA,EAGf,EAAKb,eAAiB,KAmEtB,EAAKJ,mBAAqBkB,EAAKjB,WAC1B,EAAKD,mBACRkB,EAAKjB,WAAa,EAAKvC,OAAO/N,qBAAqBa,QAGrD0Q,EAAKC,UAAYD,EAAKC,WAAa,IACnCD,EAAKxK,MAAQwK,EAAKxK,OAAS,IAC3BwK,EAAKE,QAAUF,EAAKE,SAvEI,SAACC,IACvBA,EAAOC,KAAKC,MAAMF,IAETG,aACH/W,IAAc4W,EAAKG,YAAcH,EAAKG,WAAWC,MAAM,WAIzDhX,EAAY4W,EAAKG,YAIC,aAAhBH,EAAKK,SACPvB,cAAc,EAAKC,gBAEd,EAAKJ,mBACR,EAAKrC,YAAYsC,gBAAaC,GAGhCe,IACiB,OAAbI,EAAKM,KACPC,MAAM,qBAAuBV,EAAKxW,UAAY2W,EAAKM,MAMvDE,QAAQC,IAAIT,KA6ChBH,EAAKa,gBAAkBb,EAAKa,iBAvCI,SAACV,GAC/B5W,EAAYyW,EAAKzW,UAAY4W,EAE7B,EAAKjB,eAAiB4B,aAAY,WAChC,IACMC,EAAM,IAAIC,QAAJ,UAAezX,EAAf,YAA4B0X,KAAKC,OAD7B,CAACC,OAAQ,QAEzBC,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKrB,EAAKE,WACZF,EAAKC,YA6BVD,EAAKyB,eAAiBzB,EAAKyB,gBAzBI,SAACC,GAC9B,IAAMC,EAAO,IAAIC,SACjBD,EAAKE,OAAO,aAAczB,KAAK0B,UAAUJ,EAAW3C,aACpD4C,EAAKE,OAAO,QAASH,EAAWlM,OAChCmM,EAAKE,OAAO,UAAU,GAEtB,IAAME,EAAU,CAACZ,OAAQ,OAAQa,KAAML,GACjCZ,EAAM,IAAIC,QAAQU,EAAWpY,eAAgByY,GACnDX,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKK,EAAWb,kBAerBb,EAAKyB,eAAezB,SAK1BjX,EAAEmH,sBAAsBzE,KAAO,SAAC8Q,EAAOpT,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBoT,KAAKG,EAAOpT,K,eCzVjDJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEsL,iBAAiB+H,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CACzCC,QAAS,CACP8Y,QAAS,GACTC,QAAS,gBACT7F,OAAQtT,EAAE0Q,iBAAiB0I,YAG7B1Y,WAPyC,SAO9B0C,EAAShD,GAClBQ,KAAKyY,SAAWjW,EAChBxC,KAAK0Y,eAAgB,EACrB1Y,KAAK4D,MAAQpB,EAAQhD,QAAQmE,KAC7B3D,KAAK2Y,cAAe,EACpB3Y,KAAK4Y,WAAY,EAEjBxZ,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB0I,WAAWzF,OAAS,aAIzC7C,SApByC,WAqBvC,IAAM1N,EAAUxC,KAAKyY,SAErBzY,KAAKgT,YAAchT,KAAKR,QAAQyT,QAGhCzQ,EAAQqW,eACR7Y,KAAK8Y,aACL9Y,KAAK+Y,eACL/Y,KAAKgZ,4BAGDxW,EAAQ0H,eAAiB1H,EAAQhD,QAAQgW,iBAC3CxV,KAAKqC,cAGPrC,KAAKiZ,cAAczW,EAAQyF,IAAKzF,EAAQyF,GAExC7I,EAAE8B,SAASR,GAAG8B,EAAQjB,aAAc,CAClC2X,SAAUlZ,KAAKmZ,UACdnZ,MAEHZ,EAAE8B,SAASR,GAAG0Y,OAAQ,UAAWpZ,KAAKqT,WAAYrT,OAIpD8Q,YA9CyC,WA+CvC,IAAMtO,EAAUxC,KAAKyY,SACfxQ,EAAKjI,KAAKiZ,YAOhB,IAAK,IAAII,KAJTrZ,KAAKsZ,mBAEDtZ,KAAKyK,SAAWzK,KAAKsC,iBAENtC,KAAKuZ,SACtBna,EAAE6C,QAAQ8O,OAAOsI,GAOfja,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAC3CnC,EAAE6C,QAAQ8R,YAAYvR,EAAQjB,aAAc,aAG1C0G,IAAQA,EAAG9F,gBAAkB8F,EAAGzH,QAAQiK,SAC1CxC,EAAGzH,QAAQ8B,iBAGblD,EAAE8B,SAASH,IAAIyB,EAAQjB,aAAc,CACnC2X,SAAUlZ,KAAKmZ,UACdnZ,MAEHZ,EAAE8B,SAASH,IAAIqY,OAAQ,UAAWpZ,KAAKqT,WAAYrT,OAGrDc,QA9EyC,WA+EvC,OAAKd,KAAKyT,UAEVzT,KAAKyY,SAASrW,WACdpC,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MALsBA,MAQ/B8Y,WAvFyC,WA2FvC,IAAK,IAAInV,KAHT3D,KAAKwZ,OAAS,GAGGpa,EAAEsL,iBAAiB+H,KAAKgH,MAAO,CAC9C,IAAI9D,EAASvW,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,IACD,IAAtC3D,KAAKgT,YAAY0G,QAAQ/D,KAC3B3V,KAAKwZ,OAAO7V,GAAQgS,GAMnB3V,KAAKwZ,OAAOxZ,KAAK4D,SACpB5D,KAAK4D,MAAQsE,OAAOC,KAAKnI,KAAKwZ,QAAQ,KAK1CT,aA1GyC,WA2GvC,IACI/V,EADER,EAAUxC,KAAKyY,SAIrB,IADAzY,KAAK2Z,aAAeva,EAAEwa,aACjB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAK2Z,aAAaE,SAASza,EAAE0a,WAAWtX,EAASQ,IAInD,IADAhD,KAAK+Z,cAAgB3a,EAAEwa,aAClB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAK+Z,cAAcF,SAASza,EAAE4a,YAAYxX,EAASQ,IAIrD,IADAhD,KAAKia,gBAAkB7a,EAAEwa,aACpB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKia,gBAAgBJ,SAASza,EAAE8a,cAAc1X,EAASQ,IAIzD,IADAhD,KAAKma,eAAiB/a,EAAEwa,aACnB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKma,eAAeN,SAASza,EAAEgb,aAAa5X,EAASQ,IAKvD,IADAhD,KAAKqa,mBAAqBjb,EAAEwa,aACvB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKqa,mBAAmBR,SAASza,EAAEkb,iBAAiB9X,EAASQ,IAI/D,IADAhD,KAAKua,aAAenb,EAAEwa,aACjB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKua,aAAaV,SAASza,EAAEob,WAAWhY,EAASQ,EAAG,CAACyX,WAAW,KAGlEza,KAAKuZ,SAAW,CACdlY,KAAMrB,KAAK2Z,aACX9N,MAAO7L,KAAK+Z,cACZW,QAAS1a,KAAKia,gBACdU,OAAQ3a,KAAKma,eACbS,WAAY5a,KAAKqa,mBACjBQ,KAAM7a,KAAKua,eAIfvB,0BAvJyC,WAwJvC,IAAM8B,EAAK9a,KAAKyY,SAGXzY,KAAK4D,OAKV5D,KAAK+a,iBAEAD,EAAG5Q,cAAgBlK,KAAKgb,eAC3Bhb,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASpa,aAGtCd,KAAKmb,OAAO,SAAWnb,KAAKob,mBAZ/Bpb,KAAKob,mBAeT/H,WA3KyC,SA2K9BrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KACvBmH,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAEZhR,GAAMA,EAAG9F,qBAEakT,IAAtBrV,KAAK0T,IAA+BoH,EAAGtb,QAAQgW,iBAC7CsF,EAAG5Q,cAAgBlK,KAAKyK,SAC1BzK,KAAK0T,GAAaxT,KAAKF,OAK7Bqb,YA1LyC,SA0L7BC,EAAKC,GAAM,WACrB,MAAuB,yBAAnBA,EAAK1F,WAAwC7V,KAAKiU,QAAQsH,IAG9Dvb,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASuF,EAAK,CAIhB,IAAK,IAAI3X,KAHT,EAAKrB,iBACL,EAAK0Q,YAAYgD,GAAOuF,EACxB,EAAKlZ,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU2X,UACnC,EAAK9B,OAAO7V,GACnB,EAAK6X,YAAY7X,IACRvE,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU4X,IACjD,EAAK/B,OAAO7V,GAAQ4X,GAGxB,OAAO,MAfFvb,MAqBX4V,QAjNyC,SAiNjCF,GACN,GAAwB,yBAApBA,EAAMG,YAAyC7V,KAAKiU,QAAQyB,GAAQ,CAItE,IAAK,IAAI/R,KAHT3D,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU+R,IAC1C1V,KAAKwZ,OAAO7V,GAAQ+R,GAGnB1V,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBAE1C,OAAOtC,MAGTiU,QAhOyC,SAgOjCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDI,WApOyC,SAoO9BJ,GAAO,WAgBhB,OAfA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASL,EAAO,CAIlB,IAAK,IAAI/R,KAHT,EAAKrB,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU+R,WACnC,EAAK8D,OAAO7V,GACnB,EAAK6X,YAAY7X,IAGrB,OAAO,MAGN3D,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBACjCtC,MAITwb,YAxPyC,SAwP7B7X,GACN3D,KAAKmb,OAAOxX,KACVuE,OAAOC,KAAKnI,KAAKyb,YAAY5W,QAAU,EACzC7E,KAAKmZ,YAEQ,SAATxV,GAAmB3D,KAAKob,kBAC5Bpb,KAAK4D,MAAQ,GACb5D,KAAK+a,mBAKXzY,eApQyC,WAqQvC,IACIhC,EADON,KAAKyY,SACHlY,KAETP,KAAKyK,UACPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,IAInB2Q,gBA9QyC,WA8QvB,WACZ5Y,EAAUxC,KAAKyY,SACbnY,EAAMkC,EAAQjC,KAEpBP,KAAKkb,SAAW,IAAI9b,EAAEsc,UAAUlZ,EAAQjB,cACxCvB,KAAKkb,SAASza,SAGdT,KAAKkb,SAASxa,GAAG,aAAa,WAC5B8B,EAAQqG,KAAK,aACb,EAAKvG,oBAOPtC,KAAKkb,SAASS,gBAAkB,WAC9B,IAEIC,EAEA5Y,EAJEK,EAAUb,EAAQW,UAAU,GAC5BG,EAAQtD,KAAK6b,QAAQtY,SAASjD,EAAI8C,mBAAmBC,IAEvDkC,EAAU,GAKd,IAFAvF,KAAK6I,KAAK,WAEL7F,EAAI,EAAGA,EAAI,EAAGA,IACjB4Y,EAAetb,EAAI8C,mBAAmBZ,EAAQW,UAAUH,IACxDuC,EAAQvC,GAAK1C,EAAIqL,mBAAmBiQ,EAAahS,IAAItG,IAGvDd,EAAQ+I,WAAWhG,GACnB/C,EAAQqG,KAAK,QAEb7I,KAAK6I,KAAK,SAGZ7I,KAAKkb,SAASxa,GAAG,WAAW,WAC1B8B,EAAQqG,KAAK,eAIjByQ,iBAxTyC,WAyTnCtZ,KAAKkb,WACPlb,KAAKkb,SAASpa,iBACPd,KAAKkb,WAIhBY,UA/TyC,WAgUvC9b,KAAK+b,QAAQ,SAGfC,WAnUyC,WAoUvChc,KAAK+b,QAAQ,UAGfE,aAvUyC,WAwUvCjc,KAAK+b,QAAQ,YAGfG,YA3UyC,WA4UvClc,KAAK+b,QAAQ,WAGfI,gBA/UyC,WAgVvCnc,KAAK+b,QAAQ,eAGfK,gBAnVyC,WAoVnCpc,KAAKmb,OAAO,QAAWnb,KAAKmU,UACzBnU,KAAKsU,SAGd+H,eAxVyC,WAyVvC,IACI/D,EADElK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEkd,iBAEpBtc,KAAK2Y,cAAgB3Y,KAAK2Y,aAC1BL,EAAUtY,KAAK2Y,aAAe3Y,KAAKR,QAAQ8Y,QAAU,EAErDlZ,EAAE6C,QAAQgZ,WAAW7M,EAAOkK,GAC5BlK,EAAM8C,aAAa,UAAWoH,GAE9BtY,KAAKuc,aAGPC,cAvWyC,WAwWvC,IACIjE,EADEnK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEqd,gBAEpBzc,KAAK4Y,WAAa5Y,KAAK4Y,UACvBL,EAAUvY,KAAK4Y,UAAY5Y,KAAKR,QAAQ+Y,QAAU,OAElDnK,EAAMjC,MAAMoM,QAAUA,EAEtBvY,KAAKuc,aAIPG,aAtXyC,WAuXnC1c,KAAK0Y,cAAiB1Y,KAAK2c,WACxB3c,KAAK4c,cAGdC,eA3XyC,WA4XvC,IAAI/B,EAAK9a,KAAKyY,SACRxQ,EAAKjI,KAAKiZ,aAEZjZ,KAAKmb,OAAO,SAAYnb,KAAKiU,QAAQ7U,EAAEyV,eAE5BzV,EAAE6C,QAAQ6a,kBAGzB9c,KAAKsC,iBAED2F,EAAMA,EAAGgN,YAAY6F,GAClBA,EAAGva,KAAK0U,YAAY6F,KAI7BiC,WA3YyC,WA4YvC,IAAIva,EAAUxC,KAAKyY,SACfnY,EAAMkC,EAAQjC,KACdoE,EAAMnC,EAAQjB,aAElB,GAAKvB,KAAKiU,QAAQ7U,EAAE8W,cAApB,CAGA,IAAI8G,EAAe,IAAIC,MAEvBD,EAAanX,GAAKmX,EAAanX,IAAM,cACrCmM,SAASqG,KAAK5Q,YAAYuV,GAE1BA,EAAaE,OAAS,WACpB,IAAIlX,EAASgX,EAAahX,OACtBD,EAAQiX,EAAajX,MACrBoX,EAAK7c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cia,EAAK9c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cka,EAAK/c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cma,EAAKhd,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAsBlD6Z,EAAaE,OAAS,WACpB9d,EAAE6C,QAAQ8O,OAAOiM,IAGf5D,QAAUA,OAAOmE,eAAe,cAClCC,UACIR,EAAanX,GACb,CAAC,EAAG,EAAGE,EAAO,EAAGA,EAAOC,EAAQ,EAAGA,GACnC,CAACmX,EAAGlZ,EAAGkZ,EAAGjZ,EAAGkZ,EAAGnZ,EAAGmZ,EAAGlZ,EAAGoZ,EAAGrZ,EAAGqZ,EAAGpZ,EAAGmZ,EAAGpZ,EAAGoZ,EAAGnZ,IAC9C,IAKR8Y,EAAa9X,IAAM1C,EAAQhD,QAAQie,mBAAqB9Y,EAAIO,MAG9DyX,SArcyC,WAsc/B3c,KAAK0Y,eAEF1Y,KAAKiU,QAAQ7U,EAAEse,eAE1B1d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASI,eACd7Y,KAAKuc,aAGPK,WA/cyC,YAgd/B5c,KAAK0Y,eAEH1Y,KAAKiU,QAAQ7U,EAAEse,eAEzB1d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASkF,cACd3d,KAAKuc,aAGPpI,QAzdyC,WA0dvC,IAAI2G,EAAK9a,KAAKyY,SACVnY,EAAMwa,EAAGva,KACP0H,EAAKjI,KAAKiZ,YAEXjZ,KAAKmb,OAAO,YACZlT,GAAOA,EAAG1F,YAAYuY,KAAS7S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eACvB,SAApBF,EAAGtb,QAAQmE,MAAoB3D,KAAK4d,QAAQ9C,EAAGtb,QAAQmE,MAIzD3D,KAAK4D,MAAQkX,EAAGtb,QAAQmE,MAHxB3D,KAAK4D,MAAQ,GACb5D,KAAKgb,cAAgB,IAIvBhb,KAAK+a,gBACL/a,KAAKob,kBACLpb,KAAKuc,aAGPjI,MA/eyC,WAgfvC,IAAMwG,EAAK9a,KAAKyY,SACVnY,EAAMwa,EAAGva,KACT0H,EAAKjI,KAAKiZ,YAEZjZ,KAAKmb,OAAO,YACXlT,GAAOA,EAAG1F,YAAYuY,KAAS7S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eAC/Chb,KAAK4D,MAAQ,OACb5D,KAAK+a,gBACL/a,KAAKsZ,mBACLtZ,KAAKuc,aAGPsB,UAhgByC,WAigBvC7d,KAAKyY,SAASrW,YAGhBiI,aApgByC,SAogB5BrJ,GACX,IAAMiH,EAAKjI,KAAKiZ,YAEXjZ,KAAKgb,iBAELhb,KAAKmb,OAAO,SAAYlT,GAAMA,EAAG9F,gBAEtCnC,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASza,SACvCrB,EAAE6C,QAAQ4N,SAASwJ,EAAO9X,aAAc,4BAI5C4I,aAlhByC,WAmhBvC,IAAM2Q,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAGXjZ,KAAKuZ,UAAYvZ,KAAK+Y,eAEtB/Y,KAAKgb,gBACNhb,KAAKmb,OAAO,SAAYlT,GAAMA,EAAG1F,YAAYuY,IAEjD9a,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASpa,UACvC1B,EAAE6C,QAAQ8R,YAAYsF,EAAO9X,aAAc,4BAI/CwZ,cAniByC,WAoiBvC,IACIza,EADON,KAAKyY,SACHlY,KACPoD,EAAO3D,KAAK8d,UAEd9d,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eAC/Chb,KAAKgb,cAAyB,KAATrX,EAAc,GAAK3D,KAAKuZ,SAAS5V,GAC3B,KAAvB3D,KAAKgb,eACP1a,EAAIuZ,SAAS7Z,KAAKgb,gBAItB3Y,YA/iByC,WAgjBvC,IAAIyY,EAAK9a,KAAKyY,SACRxQ,EAAKjI,KAAKiZ,YACZ3Y,EAAMwa,EAAGva,KAEPgF,EAAUuV,EAAGxV,aACfyY,GAAS,IAEb,GAAI9V,GAAMA,EAAG9F,eACX8F,EAAGzH,QAAQ6B,mBAIb,IAAIyY,EAAGtb,QAAQgW,kBAAmBxV,KAAKyK,QAAvC,CAEA,IAAK,IAAIzH,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAMuY,IACnBA,EAASxY,EAAQvC,GAAGwC,KAKxB,IAAIwY,EAAclD,EAAGvR,YACrByU,EAAYxY,IAAMuY,EAElB/d,KAAKyK,QAAUrL,EAAE0Q,iBAAiBmO,SAASD,EAAa,CACtD/K,QAASjT,KAAKgT,cACbpB,MAAMtR,EAAKwa,GACdA,EAAGjS,KAAK,qBAGV0T,SA9kByC,WA+kBnCvc,KAAKyK,SAAWzK,KAAKsC,iBACzBtC,KAAKqC,eAGPuI,kBAnlByC,WAolBvC,IAAMpI,EAAUxC,KAAKyY,SAEflT,EAAU/C,EAAQ8C,aACpBmF,EAAUzK,KAAKyK,QACfsT,GAAS,IAEb,GAAItT,GAAWA,aAAmBrL,EAAEsL,iBAAiBC,SAAU,CAC7D,IAAK,IAAI3H,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAMuY,IACnBA,EAASxY,EAAQvC,GAAGwC,KAKxB,IAAIwY,EAAcxb,EAAQ+G,YAC1ByU,EAAYxY,IAAMuY,EAEbvb,EAAQhD,QAAQgW,iBACnBxV,KAAKyK,QAAQyT,UAAUF,KAK7BJ,QA3mByC,SA2mBjCja,GACN,QAAS3D,KAAKwZ,OAAO7V,IAGvBma,QA/mByC,WAgnBvC,GAAK9d,KAAKgC,UACV,OAAOhC,KAAK4D,OAGd6X,SApnByC,WAqnBvC,OAAOzb,KAAKwZ,QAGd2B,OAxnByC,SAwnBlCxX,GACL,QAAK3D,KAAKgC,WACHhC,KAAK4D,QAAUD,GAGxBoY,QA7nByC,SA6nBjCoC,GACN,IAAMrD,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAGhB,GAFWjZ,KAAK8d,YAEHK,GAAYne,KAAK4d,QAAQO,IAAane,KAAKgC,UAaxD,OATIhC,KAAKyK,SAAWzK,KAAKyK,QAAQ2T,UAAUD,GACvCne,KAAKmb,OAAO,UAAYnb,KAAKkb,UAAYlb,KAAKob,kBAClDpb,KAAK4D,MAAQua,EACTne,KAAKmb,OAAO,SAAWnb,KAAKsZ,mBAChCtZ,KAAK+a,gBACL/a,KAAKuc,WAEDtU,GAAMA,EAAG1F,YAAYuY,IAAOA,EAAG1Y,WAE5BpC,MAOTmZ,SAtpByC,SAspBhCnY,GACP,IAAI2C,EAAO3D,KAAK8d,UACV7V,EAAKjI,KAAKiZ,YACZoF,EAAanW,OAAOC,KAAKnI,KAAKyb,YAC9BzF,EAAMqI,EAAW3E,QAAQ/V,GAEzBwa,EAAUE,GADCrI,EAAM,GAAKqI,EAAWxZ,QAGrC,GAAI7D,EAAG,CACL,GAAIiH,GAAMA,EAAG9F,eAAkB,OAC/B/C,EAAE8B,SAASod,KAAKtd,GAGlB,OAAOhB,KAAK+b,QAAQoC,MAIxB/e,EAAE0Q,iBAAiBhO,KAAO,SAACU,EAAShD,GAClC,OAAO,IAAIJ,EAAEsL,iBAAiB+H,KAAKjQ,EAAShD,K,eC3qB9CJ,EAAEqd,aAAerd,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK8W,WACP4F,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAYiQ,eAEtCF,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAYkQ,YAGxCnf,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAI5CvE,EAAEsL,iBAAiB8N,WAAWuG,EAAa,SAATpb,EAAkB,GAAK,gBAEzDvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BmC,WA8BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,eAAgB,gBACnD7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpDnd,EAAK0a,oB,eClCTpd,EAAEyV,aAAezV,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIif,EAFE3c,EAAOU,EAAQhC,QAOjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCgM,EAAUjc,EAAQhD,QAAQiP,YAAYyQ,YAEtC9f,EAAEsL,iBAAiB8N,WAAW2G,UACb,SAAfrd,EAAK8B,MAAmB,GAAK,mBAG/B6a,EAAUjc,EAAQhD,QAAQiP,YAAY2Q,aACtChgB,EAAEsL,iBAAiBiI,iBAAiBwM,UACnB,SAAfrd,EAAK8B,MAAmB,GAAK,iBAIjCpE,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAtBU,iBAuBVL,QAASA,EACT5M,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAjCmC,WAkCjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAK+a,iBAC7C/a,EAAK8S,mB,eCrChBxV,EAAEigB,cAAgBjgB,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAY6Q,aACrCzN,UAAW,WAGbzS,EAAEsL,iBAAiB8N,WAAW+G,EAAI,eAClCngB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdoC,WAevBlQ,KAAKyY,SAASjY,QACpByb,mB,eChBT7c,EAAEogB,WAAapgB,EAAEmf,WAAWhf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,OACNL,QAASjc,EAAQhD,QAAQiP,YAAYgR,UACrC5N,UAAW,QAGbzS,EAAEsL,iBAAiB8N,WAAWkH,EAAI,YAClCtgB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdiC,WAelBlQ,KAAKyY,SAASjY,QACtBsb,gB,eChBT1c,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEmf,WAAanf,EAAEugB,SAASC,OAAOrgB,OAAO,CACtCC,QAAS,CACPof,YAAa,CACXC,KAAK,EACLC,KAAM,GACNjN,UAAW,GACX4M,QAAS,KAIb3e,WAVsC,SAU3BQ,EAAKkC,EAAShD,GACvBQ,KAAKyY,SAAWjW,EAChBxC,KAAKO,KAAOD,EAEZlB,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEugB,SAASC,OAAO3f,UAAUH,WAAWI,KAAKF,KAAMR,GAElDQ,KAAK+R,kBAGP8N,YApBsC,SAoB1BpV,EAASuG,EAAW8O,GAAM,WAC9BC,EAAc/f,KAAKR,QAAQof,YAC3B/M,EAAYkO,EAAYlO,UACxB/P,EAAO9B,KAAKyY,SAASjY,QAE3BR,KAAKyK,QAAUA,EACfzK,KAAKggB,MAAQ5gB,EAAE6C,QAAQgP,OAAO,KAAM,GAAID,GACxChR,KAAKif,MAAQ7f,EAAE6C,QAAQgP,OAAO,IAAK,GAAIjR,KAAKggB,OAExCD,EAAYlB,IACd7e,KAAKif,MAAM5N,UAAYjS,EAAEkS,SAASL,OAAO8O,EAAYjB,MAErD9e,KAAKif,MAAM5N,UAAY0O,EAAYjB,KAGrC9e,KAAKif,MAAM/N,aAAa,OAAQ,KAChClR,KAAKif,MAAM/N,aAAa,QAAS6O,EAAYtB,SACzCsB,EAAY5T,OAASnM,KAAKif,MAAM/N,aAAa,QAAS6O,EAAY5T,OACtEnM,KAAKif,MAAM/N,aAAa,OAAQ,UAEhC9R,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAOjf,KAAKigB,YAAYpK,WAE5ChE,IACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAOpN,GACb,aAAdA,GACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKggB,MAAOnO,GAE7BA,IAAc/P,EAAK8B,MACrBxE,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAO,iBAE/B7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAO,kBAItC7f,EAAE8B,SAASR,GAAGV,KAAKif,MAAO,QAASjf,KAAKS,OAAQT,MAChDZ,EAAE8B,SAASR,GAAGV,KAAKyY,SAAU,UAAU,WACrC,IAAM7B,EAAQ,EAAKqI,MAAM5N,UAAUuF,MAAM,yBACrCA,GAA0B,IAAjBA,EAAM/R,QAAgB,EAAKqb,mBAI1ClgB,KAAKmgB,eAAe1V,EAASzK,KAAKggB,MAAOF,IAG3C/N,eAhEsC,WAiEpC,IAAIC,SAASC,cAAc,YAA3B,CAIA,IAAIC,EAAKF,SAASoO,cAAc,OAChClO,EAAGrM,GAAK,UACRqM,EAAGhB,aAAa,SAAU,UAC1BgB,EAAGb,WAAY,IAAIjS,EAAEihB,gBAAiBhO,SAEtCL,SAASC,cAAc,wBAAwBxK,YAAYyK,KAG7DgO,cA7EsC,WA8EpC9gB,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAMqB,cAAe,YAChDlhB,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAO,aAGpCsB,eAlFsC,WAmFpCnhB,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAMqB,cAAe,YAC7ClhB,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAO,eAInC7f,EAAEohB,WAAa,SAASlgB,EAAKkC,EAAShD,GACpC,OAAO,IAAIJ,EAAEmf,WAAWje,EAAKkC,EAAShD,K,eC9FxCJ,EAAE8W,aAAe9W,EAAEmf,WAAWhf,OAAO,CAEnCO,WAFmC,SAExBQ,EAAKkC,EAAShD,GACvB,IACIif,EADE3c,EAAOU,EAAQhC,QAGrBR,KAAKygB,aAAc,EACnBzgB,KAAK0gB,gBAAiB,EACtB1gB,KAAK2gB,iBAAkB,EAEnB7e,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAWxX,EAAI,aAClCyd,EAAUjc,EAAQhD,QAAQiP,YAAYmS,cAEtCxhB,EAAEsL,iBAAiBiI,iBAAiB3R,EAAI,cACxCyd,EAAUjc,EAAQhD,QAAQiP,YAAYoS,eAGxCrhB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASA,GAGXrf,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BmC,WA6BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3B,GAAIsB,aAAgB1C,EAAEsL,iBAAiB+H,KACrC3Q,EAAKib,kBAKP,IAAI/c,KAAK2gB,gBAAT,CAGE3gB,KAAK2gB,iBAAkB,EAGzB,IAAMG,EAAa9gB,KAAKif,MAAMqB,cAE9BtgB,KAAK+gB,kBAAoB/gB,KAAKghB,iBAAiBpe,KAAK5C,MACpDA,KAAKihB,kBAAoBjhB,KAAKkhB,iBAAiBte,KAAK5C,MAEpDZ,EAAE8B,SAASR,GAAGogB,EAAY,SAAS,WACjC,GAAK9gB,KAAKygB,YAWH,CAEL,GAAIzgB,KAAK0gB,eACP,OAGF1gB,KAAKmhB,aACLnhB,KAAKohB,0BAA0BN,GAC/Bhf,EAAKoT,oBAlBLlV,KAAKygB,aAAc,EACnBzgB,KAAKqhB,mBAELC,WAAWthB,KAAKuhB,0BAA0B3e,KAAK5C,KAAM8gB,GAAa,KAClEhf,EAAKoR,cAAcwE,KACf,WACE1X,KAAKmhB,aACLnhB,KAAKohB,0BAA0BN,IAC/Ble,KAAK5C,SAYZA,QAGLmhB,WAzEmC,WA0EjCnhB,KAAKwhB,qBACLxhB,KAAKygB,aAAc,EACnBzgB,KAAK0gB,gBAAiB,GAGxBa,0BA/EmC,SA+ETE,GACxBA,EAAQC,iBAAiB,aAAc1hB,KAAK+gB,mBAC5CU,EAAQC,iBAAiB,aAAc1hB,KAAKihB,oBAG9CG,0BApFmC,SAoFTK,GACxBA,EAAQE,oBAAoB,aAAc3hB,KAAK+gB,mBAC/CU,EAAQE,oBAAoB,aAAc3hB,KAAKihB,oBAGjDD,iBAzFmC,WA0FjChhB,KAAK4hB,oBAGPV,iBA7FmC,WA8F5BlhB,KAAK0gB,eAGR1gB,KAAK0gB,gBAAiB,EAFtB1gB,KAAKqhB,oBAMTG,mBArGmC,WAsGjCpiB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,UAAW,WAC9C7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAM4C,WAAY,WAG/CR,iBA3GmC,WA4GjCjiB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,WACnC7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAEkS,SAASwQ,cAAc9hB,KAAKif,MAAO,WAGvC2C,iBAjHmC,WAkHjCxiB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,UACnC7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAM4C,WAAY,c,cCpHjDziB,EAAE2iB,iBAAmB3iB,EAAEmf,WAAWhf,OAAO,CACvCO,WADuC,SAC5BQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,cACNL,QAASjc,EAAQhD,QAAQiP,YAAYuT,gBACrCnQ,UAAW,cAGbzS,EAAEsL,iBAAiB8N,WAAWyJ,EAAI,kBAClC7iB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAduC,WAe1BlQ,KAAKyY,SAASjY,QACpB2b,sB,eChBT/c,EAAE8iB,gBAAkB9iB,EAAEmf,WAAWhf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IAAMsC,EAAOU,EAAQhC,SAErBhB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAY0T,eACrCtQ,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAfsC,WAgBpC,IAAI9B,EAAQpO,KAAKyY,SAASlX,aAE1B6gB,KAAKC,QAAQjU,EAAOhP,EAAEgjB,KAAKhU,Q,eClB/BhP,EAAEiV,WAAajV,EAAEmf,WAAWhf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,GACvB,IACIgf,EACAC,EAFE3c,EAAOU,EAAQhC,QAIjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAW8J,EAAI,UAClCljB,EAAEsL,iBAAiB8N,WAAW+J,EAAI,QAClC9D,EAAUjc,EAAQhD,QAAQiP,YAAY+T,SAEtChE,EAAM1c,EAAKqZ,OAAO,QAAU,OAAS,WAErC/b,EAAEsL,iBAAiBiI,iBAAiB4P,EAAI,aACxC9D,EAAUjc,EAAQhD,QAAQiP,YAAYgU,WACtCjE,EAAM,SAGRhf,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAW,QAGbzS,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BiC,WA8B/B,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAKsa,kBAC7Cta,EAAKsS,iB,0BCjCVsO,EAAkBtjB,EAAEujB,gBAAkBvjB,EAAEmf,WAAWhf,OAAO,CAC9DO,WAD8D,SACnDQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK6W,cACP6F,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAYmU,kBAEtCpE,EAAM,YACNC,EAAUjc,EAAQhD,QAAQiP,YAAYoU,uBAGxCrjB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAG5CnE,EAAQsjB,WAAa,IAAI1jB,EAAEugB,SAAS,CAClC1M,QAAS,CAAC8P,EAAiBC,EAAgBC,EAAgBC,EAAgBC,EAAgBC,EAAeC,KAM5GjkB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAjC8D,eA2C1DkT,EAAgBhkB,EAAEmf,WAAWhf,OAAO,CACxCC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,aACT5M,UAAW,gCACX1F,MAAO,yCAGX+D,SAAU,eAMNiT,EAAiB/jB,EAAEmf,WAAWhf,OAAO,CACzCC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,cACT5M,UAAW,gCACX1F,MAAO,wCAGX+D,SAAU,eAMNgT,EAAiB9jB,EAAEmf,WAAWhf,OAAO,CACzCC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,cACT5M,UAAW,gCACX1F,MAAO,wCAGX+D,SAAU,eAMN+S,EAAiB7jB,EAAEmf,WAAWhf,OAAO,CACzCC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,cACT5M,UAAW,gCACX1F,MAAO,wCAGX+D,SAAU,eAMN8S,EAAiB5jB,EAAEmf,WAAWhf,OAAO,CACzCC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,cACT5M,UAAW,gCACX1F,MAAO,wCAGX+D,SAAU,eAMN6S,EAAkB3jB,EAAEmf,WAAWhf,OAAO,CAC1CC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,eACT5M,UAAW,gCACX1F,MAAO,sCAGX+D,SAAU,eAMNmT,EAASjkB,EAAEmf,WAAWhf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,GACvBQ,KAAKM,IAAMA,EACXN,KAAKsjB,SAAW9gB,GAEhBhD,EAAUA,GAAW,IACbof,YAAc,CACpBE,KAAM,WACNL,QAAS,SACT5M,UAAW,gCACX1F,MAAO,sBAGT/M,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAAU,WACR8G,QAAQuM,KAAK,GACbvM,QAAQuM,KAAK,EAAK9K,UAClBzB,QAAQuM,KAAK,EAAK/gB,SAClBwU,QAAQuM,KAAKF,EAAO7gB,SACpBwU,QAAQuM,KAAK,EAAKD,UAElBZ,EAAgBjK,SAAS3X,UAEzB,EAAKA,c,eC9JT1B,EAAEkd,cAAgBld,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK6W,cACP6F,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAYmU,kBAEtCpE,EAAM,UACNC,EAAUjc,EAAQhD,QAAQiP,YAAYoU,uBAGxCrjB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAG5CvE,EAAEsL,iBAAiB8N,WAAWgL,EAAa,SAAT7f,EAAkB,GAAK,iBAEzDvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BoC,WA6BlC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QACrBijB,EAAOzjB,KAAKif,MAElB7f,EAAEkS,SAAS0N,YAAYyE,EAAM,UAAW,iBACxCrkB,EAAEkS,SAASQ,YAAY2R,EAAM,yBAA0B,qBACvD3hB,EAAKua,qB,eClCTjd,EAAEskB,cAAgBtkB,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAAImE,EAAOvE,EAAEe,MAAMgT,aAAa3Q,EAAS,UAAW,SAChDqI,EAASrI,EAAQqI,QAErBrL,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAYkV,aACrC9R,UAAWhH,GAAmB,SAATlH,EAAkB,GAAK,YAG9CvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAhBoC,WAiBlC,IAAM4K,EAAK9a,KAAKyY,SAEhBrZ,EAAE8B,SAASR,GAAGoa,EAAI,CAChBhZ,KAAM9B,KAAKkgB,cACXpS,QAAS9N,KAAKugB,gBACbvgB,MAEH8a,EAAGhN,c,eCxBP1O,EAAEwkB,aAAexkB,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASjc,EAAQhD,QAAQiP,YAAYoV,YACrChS,UAAW,UAGbzS,EAAEsL,iBAAiB8N,WAAWsL,EAAI,cAClC1kB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdmC,WAepBlQ,KAAKyY,SAASjY,QACtB0b,kB,eChBT9c,EAAE2kB,YAAc3kB,EAAEmf,WAAWhf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,QACNL,QAASjc,EAAQhD,QAAQiP,YAAYuV,WACrCnS,UAAW,SAGbzS,EAAEsL,iBAAiB8N,WAAWyL,EAAI,aAClC7kB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdkC,WAenBlQ,KAAKyY,SAASjY,QACtBwb,iB,eChBT5c,EAAEse,YAActe,EAAEmf,WAAWhf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,GACvB,IACIgf,EACAC,EAFE3c,EAAOU,EAAQhC,QAIjBsB,EAAK4W,eACP8F,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAYyV,eAEtC1F,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAY0V,cAGxC3kB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEsL,iBAAiB8N,WAAWlL,EAAmB,SAAfxL,EAAK8B,MAAmB,GAAK,WAC/DxE,EAAEsL,iBAAiB8N,WAAW4L,EAAmB,SAAftiB,EAAK8B,MAAmB,GAAK,aAE/DxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BkC,WA6BhC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,gBAAiB,gBACpD7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,iBAAkB,iBACrDnd,EAAK4a,mB,eCjCTtd,EAAE8U,aAAe9U,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASjc,EAAQhD,QAAQiP,YAAY4V,cAGvCjlB,EAAEsL,iBAAiBiI,iBAAiB2P,EAAI,eACxCljB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAbmC,WActBlQ,KAAKyY,SAASjY,QACpBwT,mB,eCdT5U,EAAEgjB,KAAO,SAAqBzd,GAC5B,GAAiD,IAA7CuD,OAAOC,KAAKia,KAAKkC,WAAW3f,IAAME,OAAc,CAClDmS,QAAQC,IAAImL,KAAKkC,WAAW3f,IAC5B,IAAM4f,EAAMnC,KAAKkC,WAAW3f,QAKC,IAApB4f,EAAIC,kBACiB,IAArBD,EAAIE,eAKTF,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAEhBD,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GAEfF,EAAIG,eAGJH,EAAII,iBAUqB,MAA3BJ,EAAIK,oBAK8B,MAA3BL,EAAIK,oBAHVvZ,KAAKyB,GACLyX,EAAIM,gBAAgBC,UAAYP,EAAIM,gBAAgBE,aAOvD/N,QAAQC,IAAI,yBAGdD,QAAQC,IAAI,eAAgBsN,EAAIS,cAGR,IAApBT,EAAIS,aAGuB,IAApBT,EAAIS,aAGgB,IAApBT,EAAIS,cAJH3Z,KAAKyB,QAWY,IAApByX,EAAIU,kBACmB,IAAvBV,EAAIW,qBAKkB,IAApBX,EAAIU,kBACmB,IAAvBV,EAAIW,iBAGTX,EAAIU,YAAYH,UAAYP,EAAIU,YAAYF,YAC5CR,EAAIW,qBAMVnO,MAAM,4D,cClFV3X,EAAE+lB,cAAgB/lB,EAAEgmB,WAAW7lB,OAAO,CACpCC,QAAS,CACP6lB,KAAM,UACNC,KAAMlmB,EAAEkmB,KAAK,CACXC,QAEE,iVACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZoC,WAapB1lB,KAAK2lB,SAEXrb,UAAUtK,KAAK4lB,QAAS5lB,KAAK6lB,cAGvCC,aAlBoC,WAmBlC9lB,KAAKke,UAAUle,KAAK2lB,SAASxiB,UAAUnD,KAAK4lB,aAIhDxmB,EAAE8a,cAAgB,SAAS1X,EAASwT,EAAKxW,GACvC,OAAO,IAAIJ,EAAE+lB,cAAc3iB,EAASwT,EAAKxW,K,eCxB3CJ,EAAE2mB,WAAa3mB,EAAEgmB,WAAW7lB,OAAO,CACjCC,QAAS,CACP6lB,KAAM,OACNC,KAAMlmB,EAAEkmB,KAAK,CAEXC,QAAS,ykCACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAXiC,WAY/B,IAAIljB,EAAUxC,KAAK2lB,SACbK,EAAexjB,EAAQW,UAAUnD,KAAK4lB,SACtCK,EAAYjmB,KAAK6lB,YAEvBrjB,EAAQkL,OAAOsY,EAAcC,IAG/BH,aAnBiC,WAoB/B9lB,KAAKke,UAAUle,KAAK2lB,SAASxiB,UAAUnD,KAAK4lB,aAIhDxmB,EAAE0a,WAAa,SAAStX,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAE2mB,WAAWvjB,EAASwT,EAAKxW,K,eCzBxCJ,EAAEgmB,WAAahmB,EAAE8mB,OAAO3mB,OAAO,CAC7BO,WAD6B,SAClB0C,EAAS+H,EAAQ/K,GAC1B,IAAMgL,EAAShI,EAAQW,UAAUoH,GAEjCnL,EAAEW,WAAWC,KAAMR,GAEnBQ,KAAK2lB,SAAWnjB,EAChBxC,KAAK4lB,QAAUrb,EAEf,IAAM4b,EAAgB,CACpB1L,WAAW,EACX2L,aAAc,IAGZ5mB,GAAWA,EAAQ+d,eAAe,eACpC4I,EAAc1L,UAAYjb,EAAQib,WAGpCrb,EAAE8mB,OAAOjmB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQ2b,IAGnD9lB,MArB6B,SAqBvBC,GACJlB,EAAE8mB,OAAOjmB,UAAUI,MAAMH,KAAKF,KAAMM,GACpCN,KAAKqmB,iBACLrmB,KAAK8lB,gBAGPjlB,SA3B6B,SA2BpBP,GACPN,KAAKsmB,mBACLlnB,EAAE8mB,OAAOjmB,UAAUY,SAASX,KAAKF,KAAMM,IAGzCimB,mBAhC6B,WAiC3BvmB,KAAK2lB,SAAS9c,KAAK,cAGrB2d,iBApC6B,WAqC3BxmB,KAAKymB,aAGPA,UAxC6B,WAyC3BzmB,KAAK2lB,SAAS9a,QAAS,EACvB7K,KAAK2lB,SAAS9c,KAAK,SAGrBwd,eA7C6B,WA8C3BrmB,KAAKU,GAAG,CACNgB,YAAatC,EAAE8B,SAASod,KACxBnd,UAAWnB,KAAKumB,mBAChBllB,KAAMrB,KAAK0lB,cACXgB,QAAS1mB,KAAKwmB,kBACbxmB,MAEHA,KAAK2lB,SAASplB,KAAKG,GAAG,UAAWV,KAAK8lB,aAAc9lB,MACpDA,KAAK2lB,SAASjlB,GAAG,SAAUV,KAAK8lB,aAAc9lB,OAGhDsmB,iBAzD6B,WA0D3BtmB,KAAKe,IAAI,CACPW,YAAatC,EAAE8B,SAASod,KACxBnd,UAAWnB,KAAKumB,mBAChBllB,KAAMrB,KAAK0lB,cACXgB,QAAS1mB,KAAKwmB,kBACbxmB,MAEHA,KAAK2lB,SAASplB,KAAKQ,IAAI,UAAWf,KAAK8lB,aAAc9lB,MACrDA,KAAK2lB,SAAS5kB,IAAI,SAAUf,KAAK8lB,aAAc9lB,OAIjD2mB,wBAtE6B,SAsELC,EAASC,GAC/B,IAAMrkB,EAAUxC,KAAK2lB,SACfrlB,EAAMkC,EAAQjC,KAEdumB,EAAcxmB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmBwjB,GACrChZ,EAAWtN,EAAI8C,mBAAmByjB,GAClCE,EAAsB/mB,KAAKgnB,IAAIF,EAAanZ,GAC5CsZ,EAAmBjnB,KAAKgnB,IAAIF,EAAalZ,GAE/C,OAAOvC,KAAK6b,KAAKD,EAAmBF,IAItCC,IApF6B,SAoFzB5C,EAAGrF,GACL,IAAMoI,EAAK/C,EAAEngB,EAAI8a,EAAE9a,EACbmjB,EAAKhD,EAAElgB,EAAI6a,EAAE7a,EAEnB,OAAOmH,KAAKC,IAAI6b,EAAI,GAAK9b,KAAKC,IAAI8b,EAAI,IAIxCC,oBA5F6B,SA4FTT,EAASC,GAC3B,IAAMrkB,EAAUxC,KAAK2lB,SACfrlB,EAAMkC,EAAQjC,KAGdumB,EAAcxmB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmBwjB,GACrChZ,EAAWtN,EAAI8C,mBAAmByjB,GAElCS,EACJjc,KAAKkc,MAAMT,EAAY5iB,EAAIyJ,EAAYzJ,EAAG4iB,EAAY7iB,EAAI0J,EAAY1J,GAMxE,OAHEoH,KAAKkc,MAAMT,EAAY5iB,EAAI0J,EAAS1J,EAAG4iB,EAAY7iB,EAAI2J,EAAS3J,GAGhDqjB,M,eC5GtBloB,EAAEooB,iBAAmBpoB,EAAEgmB,WAAW7lB,OAAO,CACvCC,QAAS,CACP6lB,KAAM,aACNC,KAAMlmB,EAAEkmB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZuC,WAarC,IAAMljB,EAAUxC,KAAK2lB,SACfrlB,EAAMkC,EAAQjC,KACdylB,EAAexjB,EAAQW,UAAUnD,KAAK4lB,SACtCK,EAAYjmB,KAAK6lB,YACjBlZ,EAAQ3M,KAAKqnB,oBAAoBrB,EAAcC,GAC/Cpa,EAAQ7L,KAAK2mB,wBAAwBX,EAAcC,GAE3C,IAAVtZ,GAAenK,EAAQ6K,SAASV,EAAO,OAE3C,IAAIhG,EAAenE,EAAQmE,aACtBA,IAAgBA,EAAe,IAEpC,IAAM8gB,EAAUnnB,EAAIonB,uBAAuBllB,EAAQW,UAAU,IACvDwkB,EAAUrnB,EAAIonB,uBAAuBllB,EAAQW,UAAU,IACvD+L,EAAI7D,KAAKuc,IAAIH,EAAQxjB,EAAI0jB,EAAQ1jB,GACjCmL,EAAI/D,KAAKuc,IAAIH,EAAQvjB,EAAIyjB,EAAQzjB,GACtBmH,KAAK6b,KAAKhY,EAAIA,EAAIE,EAAIA,GACxBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAEhBrJ,EAAQoJ,QAAQ,IAIpBka,aArCuC,WAsCrC9lB,KAAKke,UAAUle,KAAK2lB,SAASxiB,UAAUnD,KAAK4lB,aAIhDxmB,EAAEkb,iBAAmB,SAAC9X,EAASwT,EAAKxW,GAClC,OAAO,IAAIJ,EAAEooB,iBAAiBhlB,EAASwT,EAAKxW,K,eC3C9CJ,EAAEyoB,WAAazoB,EAAEgmB,WAAW7lB,OAAO,CACjCC,QAAS,CACP6lB,KAAM,OACNyC,aAAa,EACbxC,KAAMlmB,EAAEkmB,KAAK,CAEXC,QAAS,ycACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrB5kB,SAZiC,SAYxBP,GACPN,KAAK+nB,gBACL3oB,EAAEgmB,WAAWnlB,UAAUY,SAASX,KAAKF,KAAMM,IAG7C+lB,eAjBiC,WAkB/B,IAAMf,EAAOtlB,KAAKuB,aAElBnC,EAAEgmB,WAAWnlB,UAAUomB,eAAenmB,KAAKF,MAE3CZ,EAAE8B,SAASR,GAAG4kB,EAAM,CAClB9jB,UAAWxB,KAAKgoB,WAChBC,QAASjoB,KAAKkoB,aACbloB,MAEHZ,EAAE8B,SAASR,GAAGsR,SAAU,eAAgBhS,KAAKkoB,YAAaloB,OAG5DsmB,iBA9BiC,WA+B/B,IAAMhB,EAAOtlB,KAAKuB,aAElBnC,EAAEgmB,WAAWnlB,UAAUomB,eAAenmB,KAAKF,MAE3CZ,EAAE8B,SAASH,IAAIukB,EAAM,CACnB9jB,UAAWxB,KAAKgoB,WAChBC,QAASjoB,KAAKkoB,aACbloB,MAEHZ,EAAE8B,SAASH,IAAIiR,SAAU,eAAgBhS,KAAKkoB,YAAaloB,OAI7D0lB,cA5CiC,aA+CjCI,aA/CiC,WAgD/B9lB,KAAKke,UAAUle,KAAK2lB,SAASxiB,UAAUnD,KAAK4lB,WAG9CoC,WAnDiC,SAmDtBhnB,GACT,IAAMiH,EAAKjI,KAAK2lB,SAAS1M,YACnBnX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAK2lB,SAASnlB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAK2lB,SAASzb,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAK2lB,WAA/D,CAIA,IAAMwC,EAAarmB,EAAKyY,aAExBva,KAAKooB,OAAS9G,WAAWliB,EAAEwD,MAAK,WAC1B5C,KAAKqoB,UAAYC,aAAatoB,KAAKqoB,UAElCroB,KAAKuoB,aAGRJ,EAAWtmB,WAAU,SAASwX,GACxBrZ,OAASqZ,GAAUA,EAAOmP,kBAHhCxoB,KAAKyoB,YAAY,UAAW,CAACC,WAAW,IAO1C1oB,KAAK2oB,gBACJ3oB,MAAO,OAGZkoB,YA7EiC,SA6ErBlnB,GACV,IAAMiH,EAAKjI,KAAK2lB,SAAS1M,YACnBnX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAK2lB,SAASnlB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAK2lB,SAASzb,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAK2lB,WAA/D,CAIA,IAAMwC,EAAarmB,EAAKyY,aAEpBvZ,EAAE4nB,gBAAkB5W,UACtBmW,EAAWtmB,WAAU,SAASwX,GAC5BA,EAAOmP,kBAIPxoB,KAAKooB,QAAUE,aAAatoB,KAAKooB,QAErCpoB,KAAKqoB,SAAW/G,WAAWliB,EAAEwD,MAAK,WAChC5C,KAAKwoB,iBACJxoB,MAAO,SAIdZ,EAAEob,WAAa,SAAShY,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAEyoB,WAAWrlB,EAASwT,EAAKxW,K,eCvGxCJ,EAAEypB,aAAezpB,EAAEgmB,WAAW7lB,OAAO,CACnCC,QAAS,CACP6lB,KAAM,SACNC,KAAMlmB,EAAEkmB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZmC,WAajC,IAAMljB,EAAUxC,KAAK2lB,SACfK,EAAexjB,EAAQW,UAAUnD,KAAK4lB,SACtCK,EAAYjmB,KAAK6lB,YACjBlZ,EAAQ3M,KAAKqnB,oBAAoBrB,EAAcC,GAMrDzjB,EAAQ6K,SAASV,EAAO,QAG1BmZ,aAzBmC,WA0BjC9lB,KAAKke,UAAUle,KAAK2lB,SAASxiB,UAAUnD,KAAK4lB,aAIhDxmB,EAAEgb,aAAe,SAAS5X,EAASwT,EAAKxW,GACtC,OAAO,IAAIJ,EAAEypB,aAAarmB,EAASwT,EAAKxW,K,eC/B1CJ,EAAE0pB,YAAc1pB,EAAEgmB,WAAW7lB,OAAO,CAClCC,QAAS,CACP6lB,KAAM,QACNC,KAAMlmB,EAAEkmB,KAAK,CACXC,QAEE,iiEACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZkC,WAahC,IAAIljB,EAAUxC,KAAK2lB,SACfrlB,EAAMkC,EAAQjC,KACdoG,EAAenE,EAAQmE,aACvBqf,EAAexjB,EAAQW,UAAUnD,KAAK4lB,SACtCK,EAAYjmB,KAAK6lB,YACjBha,EAAQ7L,KAAK2mB,wBAAwBX,EAAcC,GAOlDtf,IAAgBA,EAAe,IACpC,IAAM8gB,EAAUnnB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDwkB,EAAUrnB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACrD+L,EAAI7D,KAAKuc,IAAIH,EAAQxjB,EAAI0jB,EAAQ1jB,GACjCmL,EAAI/D,KAAKuc,IAAIH,EAAQvjB,EAAIyjB,EAAQzjB,GACpBmH,KAAK6b,KAAKhY,EAAIA,EAAIE,EAAIA,GAExBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAMhBrJ,EAAQoJ,QAAQ,IAIpBka,aA3CkC,WA4ChC9lB,KAAKke,UAAUle,KAAK2lB,SAASxiB,UAAUnD,KAAK4lB,aAIhDxmB,EAAE4a,YAAc,SAASxX,EAASwT,EAAKxW,GACrC,OAAO,IAAIJ,EAAE0pB,YAAYtmB,EAASwT,EAAKxW,K,eCjDzCJ,EAAE0Q,iBAAmB1Q,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBiI,iBAAmB,GAEtCvT,EAAEsL,iBAAiBqe,WAAa3pB,EAAEugB,SAASqJ,QAAQzpB,OAAO,IAE1DH,EAAE0Q,iBAAiB2F,WAAa,SAASjW,GACvC,OAAO,IAAIJ,EAAEsL,iBAAiBqe,WAAWvpB,IAI3CJ,EAAEC,sBAAsBsQ,aAAY,WAElC3P,KAAKipB,QAAU,CACb7pB,EAAE8W,aACF9W,EAAEyV,aACFzV,EAAEiV,WACFjV,EAAE8U,cAIJ9U,EAAEC,sBAAsBoT,KAAKgH,MAAQ,CACnCoB,KAAMzb,EAAEiV,WACR6U,OAAQ9pB,EAAE8U,cAGZ,IAAMkQ,EAAIpkB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAKipB,QAE7DjpB,KAAKQ,QAAUpB,EAAEmH,sBAAsBzE,KAAK9B,KAAM,CAACiT,QAASmR,Q,cC7B9DhlB,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEsL,iBAAiBC,SAAWvL,EAAEugB,SAASwJ,MAAM5pB,OAAO,CACpDC,QAAS,CACP4pB,OAAQ,CAAC,GAAI,KAGftpB,WALoD,SAKzC0K,EAAQhL,GACjBJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEugB,SAASwJ,MAAMlpB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQhL,IAG3D0Q,SAVoD,SAU3C5P,EAAKwa,GACZ9a,KAAKM,IAAMA,EACXN,KAAK8a,GAAKA,GAGZuO,MAfoD,WAgBlD,GAAIrpB,KAAKspB,IACP,OAAOtpB,KAAKspB,IAAIC,UAIpBnL,UArBoD,SAqB1CoL,GAER,IADA,IAAMH,EAAQrpB,KAAKqpB,QACVrmB,EAAI,EAAGA,EAAIqmB,EAAMxkB,OAAQ7B,IAAK,CACrC,IAAIymB,EAAOJ,EAAMtT,KAAK/S,GAAGumB,SAAS,GAClC,GAAInqB,EAAE6C,QAAQQ,SAASgnB,EAAMD,GAE3B,OADAC,EAAKC,QACED,EAGX,OAAO,KAIXrqB,EAAE0Q,iBAAiBmO,SAAW,SAASzT,EAAQhL,GAC7C,OAAO,IAAIJ,EAAEsL,iBAAiBC,SAASH,EAAQhL,IAGjDJ,EAAEoH,wBAAwBmJ,aAAY,WAEpC3P,KAAKipB,QAAU,CACb7pB,EAAEogB,WACFpgB,EAAE2kB,YACF3kB,EAAEigB,cACFjgB,EAAEwkB,aACFxkB,EAAE2iB,iBACF3iB,EAAEiV,WACFjV,EAAEkd,cACFld,EAAEujB,gBACFvjB,EAAEqd,aACFrd,EAAE8W,aACF9W,EAAEyV,cAIJzV,EAAEsL,iBAAiB+H,KAAKgH,MAAQ,CAC9BpY,KAAMjC,EAAEogB,WACR3T,MAAOzM,EAAE2kB,YACTrJ,QAAStb,EAAEigB,cACX1E,OAAQvb,EAAEwkB,aACVhJ,WAAYxb,EAAE2iB,iBACdlH,KAAMzb,EAAEiV,YAGV,IAAM+P,EAAIpkB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAKipB,QAE7DjpB,KAAKQ,QAAUpB,EAAE0Q,iBAAiBhO,KAAK9B,KAAM,CAACiT,QAASmR,Q,eCrEzDhlB,EAAEuqB,QAAUvqB,EAAEwqB,MAAMrqB,OAAO,CAEzBsqB,KAAM,2CAENC,SAAU,GAEVzX,OANyB,WAQvB,OADArS,KAAK+pB,WAAW/pB,KAAK8pB,UACd9pB,KAAK6pB,MAGdE,WAXyB,SAWdC,GACThqB,KAAK6pB,MAAQG,M,eCdjB5qB,EAAEgT,iBAAmBhT,EAAEuqB,QAAQpqB,OAAO,CAEpCuqB,SAEI,8T,eCHN1qB,EAAEihB,eAAiBjhB,EAAEuqB,QAAQpqB,OAAO,CAClCuqB,SACE,uqT,eCHJ1qB,EAAEsQ,IAAIua,aAAa,CACjBC,cAAc,EACdC,SAAS,IAOX/qB,EAAEsQ,IAAI0a,aAAehrB,EAAEsQ,IAAI2a,QAAQ9qB,OAAO,CACxCO,WADwC,SAC7BQ,GACTN,KAAKO,KAAOD,EACZN,KAAKoQ,WAAa9P,EAAI8P,WACtBpQ,KAAKsqB,MAAQhqB,EAAIiqB,OAAOC,YACxBxqB,KAAKyqB,mBAAqB,EAC1BnqB,EAAII,GAAG,SAAUV,KAAK0qB,SAAU1qB,OAGlCkQ,SATwC,WAUtC9Q,EAAE8B,SAASR,GAAGV,KAAKoQ,WAAY,YAAapQ,KAAK2qB,aAAc3qB,OAGjE8Q,YAbwC,WActC1R,EAAE8B,SAASH,IAAIf,KAAKoQ,WAAY,YAAapQ,KAAK2qB,aAAc3qB,OAGlE4qB,MAjBwC,WAkBtC,OAAO5qB,KAAK6qB,QAGdH,SArBwC,WAsBtCtrB,EAAE6C,QAAQ8O,OAAO/Q,KAAKsqB,cACftqB,KAAKsqB,OAGdQ,YA1BwC,WA2BtC9qB,KAAKyqB,mBAAqB,EAC1BzqB,KAAK6qB,QAAS,GAGhBE,yBA/BwC,WAgCN,IAA5B/qB,KAAKyqB,qBACPnC,aAAatoB,KAAKyqB,oBAClBzqB,KAAKyqB,mBAAqB,IAI9BE,aAtCwC,SAsC3B3pB,GACX,IAAKA,EAAE8B,UAAyB,IAAZ9B,EAAEgqB,OAA4B,IAAbhqB,EAAEyQ,OACrC,OAAO,EAKTzR,KAAK+qB,2BACL/qB,KAAK8qB,cAEL1rB,EAAE6C,QAAQgpB,uBACV7rB,EAAE6C,QAAQipB,mBAEVlrB,KAAKmrB,YAAcnrB,KAAKO,KAAK6qB,2BAA2BpqB,GAExD5B,EAAE8B,SAASR,GAAGsR,SAAU,CACtBtQ,YAAatC,EAAE8B,SAASod,KACxB+M,UAAWrrB,KAAKsrB,aAChBrD,QAASjoB,KAAKurB,YACbvrB,OAGLsrB,aA5DwC,SA4D3BtqB,GACNhB,KAAK6qB,SACR7qB,KAAK6qB,QAAS,EAEd7qB,KAAKwrB,KAAOpsB,EAAE6C,QAAQgP,OAAO,MAAO,mBAAoBjR,KAAKoQ,YAC7DhR,EAAE6C,QAAQ4N,SAAS7P,KAAKoQ,WAAY,qBAEpCpQ,KAAKO,KAAKsI,KAAK,iBAGjB7I,KAAKyrB,OAASzrB,KAAKO,KAAK6qB,2BAA2BpqB,GAEnDhB,KAAK0rB,QAAUtsB,EAAEusB,OAAO3rB,KAAKmrB,YAAanrB,KAAKyrB,QAC/C,IAAIG,EAAO5rB,KAAK0rB,QAAQG,UAExBzsB,EAAE6C,QAAQ6pB,YAAY9rB,KAAKwrB,KAAMxrB,KAAK0rB,QAAQK,KAE9C/rB,KAAKwrB,KAAKrf,MAAMpG,MAAQ6lB,EAAK3nB,EAAI,KACjCjE,KAAKwrB,KAAKrf,MAAMnG,OAAS4lB,EAAK1nB,EAAI,MAGpC8nB,QAjFwC,WAkFlChsB,KAAK6qB,SACPzrB,EAAE6C,QAAQ8O,OAAO/Q,KAAKwrB,MACtBpsB,EAAE6C,QAAQ8R,YAAY/T,KAAKoQ,WAAY,sBAGzChR,EAAE6C,QAAQgqB,sBACV7sB,EAAE6C,QAAQiqB,kBAEV9sB,EAAE8B,SAASH,IAAIiR,SAAU,CACvBtQ,YAAatC,EAAE8B,SAASod,KACxB+M,UAAWrrB,KAAKsrB,aAChBrD,QAASjoB,KAAKurB,YACbvrB,OAGLurB,WAjGwC,SAiG7BvqB,GACT,IAAgB,IAAZA,EAAEgqB,OAA4B,IAAbhqB,EAAEyQ,UAIvBzR,KAAKgsB,UAEAhsB,KAAK6qB,QAAV,CAIA7qB,KAAK+qB,2BACL/qB,KAAKyqB,mBAAqBnJ,WACtBliB,EAAE6N,KAAKrK,KAAK5C,KAAK8qB,YAAa9qB,MAAO,GAEzC,IAAI2rB,EAASvsB,EAAE4K,aACXhK,KAAKO,KAAK4rB,uBAAuBnsB,KAAK0rB,QAAQU,iBAC9CpsB,KAAKO,KAAK4rB,uBAAuBnsB,KAAK0rB,QAAQW,gBAG9CthB,EAAO/K,KAAKO,KAAKuJ,UACjBT,EAASrJ,KAAKO,KAAKgJ,YAGvBoiB,EAAS3rB,KAAKO,KAAKmU,8BAA8BiX,EAAQ5gB,EAAM1B,GAE/DrJ,KAAKO,KAAKsI,KAAK,gBAAiB,CAAC2L,iBAAkBmX,QAIvDvsB,EAAEsQ,IAAIC,YAAY,aAAc,eAAgBvQ,EAAEsQ,IAAI0a,e,eCxItDhrB,EAAEsQ,IAAIua,aAAa,CACjBrhB,mBAAmB,IAOrBxJ,EAAEsQ,IAAI4c,kBAAoBltB,EAAEsQ,IAAI6c,gBAAgBhtB,OAAO,CACrDkB,OADqD,WAEnD,IAAIH,EAAMN,KAAKO,KAEf,OAAIP,KAAKyT,WAGLnT,EAAIqI,gBAAgB3G,WACtB1B,EAAIqI,gBAAgB7H,UAGtBd,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAVuBlQ,MAc9Bc,QAlBqD,WAmBnD,OAAKd,KAAKyT,UAEVzT,KAAKyT,UAAW,EAChBzT,KAAK8Q,cAEE9Q,MALsBA,MAQ/BwsB,cA3BqD,SA2BvCxrB,GACZ,IAAIV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGPD,GAAMA,EAAG9Q,WAEbxC,EAAImsB,UAAY,EAChBzsB,KAAKO,KAAKmsB,cAAgBpL,YAAW,WACd,IAAjBhhB,EAAImsB,UACNnsB,EAAImsB,SAAW,EACfnsB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQslB,OAAU/Y,GAAMA,EAAGgZ,mBAAmBC,kBAClDvsB,EAAIuI,KAAK,cAGZ,OAGLikB,eAhDqD,WAiDnD,IAAIxsB,EAAMN,KAAKO,KACXwsB,EAASzsB,EAAI0sB,QAEjB1L,YAAW,WACThhB,EAAImsB,SAAW,EACfnE,aAAahoB,EAAIosB,iBAChB,GAEEK,IAE0B,IAA3BA,EAAOvtB,QAAQ8Y,SACjByU,EAAOvtB,QAAQ8Y,QAAU,EACzByU,EAAO9R,WAAW,KAElB8R,EAAOvtB,QAAQ8Y,QAAU,EACzByU,EAAO9R,WAAW,QAKxB7b,EAAEsQ,IAAIC,YAAY,aAAc,oBAAqBvQ,EAAEsQ,IAAI4c,oB,eCxE3DltB,EAAEsQ,IAAI6c,gBAAgBU,QAAQ,CAC5B/c,SAD4B,WAE1BlQ,KAAKO,KAAKG,GAAG,CACXgpB,MAAO1pB,KAAKwsB,cACZtT,SAAUlZ,KAAK8sB,gBACd9sB,OAGL8Q,YAR4B,WAS1B9Q,KAAKO,KAAKQ,IAAI,CACZ2oB,MAAO1pB,KAAKwsB,cACZtT,SAAUlZ,KAAK8sB,gBACd9sB,OAGLS,OAf4B,WAgB1B,OAAIT,KAAKyT,UAGLzT,KAAKO,KAAKqI,mBACR5I,KAAKO,KAAKqI,kBAAkB5G,YAMlChC,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAbuBlQ,MAiB9Bc,QAjC4B,WAkC1B,OAAKd,KAAKyT,UAGVzT,KAAKO,KAAKsI,KAAK,kBAEf7I,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAPsBA,MAU/BwsB,cA5C4B,SA4CdxrB,GACZ,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGTD,GAAMA,EAAG9Q,WAEbxC,EAAImsB,UAAY,EAChBzsB,KAAKO,KAAKmsB,cAAgBpL,YAAW,WACd,IAAjBhhB,EAAImsB,UACNnsB,EAAImsB,SAAW,EACfnsB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQslB,OAAU/Y,GAAMA,EAAGgZ,mBAAmBC,kBAIlDvsB,EAAI4sB,cAActZ,EAAI,WAAY,CAACtT,MAGtC,OAGLwsB,eApE4B,SAoEb9rB,GACb,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAOb,GALAyN,YAAW,WACThhB,EAAImsB,SAAW,EACfnE,aAAahoB,EAAIosB,iBAChB,IAEE9Y,EAAM,OAAO,EAElB,IAAMuZ,EAAU7sB,EAAIwJ,UACdxG,EAAQhD,EAAId,QAAQ4tB,UACpBriB,EAAO6I,EAAG9Q,SAAWqqB,EAAU7pB,EAAQ6pB,EAAU7pB,EAEnB,WAAhChD,EAAId,QAAQmJ,gBACdrI,EAAI+sB,QAAQtiB,GAEZzK,EAAIgtB,cAActsB,EAAEusB,eAAgBxiB,O,eC1F1C3L,EAAEsQ,IAAIud,QAAQ,CAEZR,SAAU,EAEVe,gBAJY,SAIInX,GAiCd,OA9BAA,EAAOrW,KAAKytB,cAAgBruB,EAAEG,OAAO,CACnCmuB,cAAe,GACfC,QAAS,GACTC,cAAe,GACfC,QAAS,EACTd,QAAQ,EACRe,aAAc,EACdllB,mBAAmB,GAClByN,IAEO0W,SACR/sB,KAAKytB,cAAgBruB,EAAEG,OAAOS,KAAKytB,cAAe,CAChDK,aAAczX,EAAK0W,OAAS,OAAI1X,EAChCzM,oBAAmByN,EAAK0W,aAAgB1X,KAI5CrV,KAAK+tB,cAAgB3uB,EAAE4uB,UAnBX,oDAmB0B,CACpCL,QAAStX,EAAKsX,QACdC,cAAevX,EAAKuX,cACpBC,QAASxX,EAAKwX,QACdvV,QAASjC,EAAKqX,gBACb9b,MAAM5R,MAELqW,EAAK0W,OAAU/sB,KAAKiuB,WAAW5X,GAGjCrW,KAAK4I,uBAAoByM,EAGpBrV,MAGTiuB,WAxCY,SAwCD5X,GAsBT,OAnB0B,IAAtBA,EAAKyX,cAA4C,IAAtBzX,EAAKyX,eAClCzX,EAAKyX,aAAe,GAGtB9tB,KAAKgtB,QAAU5tB,EAAE4uB,UANL,8EAMoB,CAC9BE,YAAa,0OACbC,WAAY,OACZrG,aAAa,EACbxP,QAASjC,EAAKyX,aACdH,QAAStX,EAAKsX,QACdC,cAAevX,EAAKuX,cACpBC,QAASxX,EAAKwX,QACdO,IAAK,QACJxc,MAAM5R,MAELA,KAAKytB,cAAc7kB,mBACrB5I,KAAK4I,kBAAkBnI,SAGlBT,QAKXZ,EAAEsQ,IAAIC,aAAY,WAChB3P,KAAK4I,kBAAkB9H,UACvBd,KAAK2I,gBAAgBlI,a,eCtEvBrB,EAAE6C,QAAU7C,EAAEG,OAAOH,EAAE6C,QAAS,CAC9B7B,gBAD8B,SACdiuB,GACdruB,KAAKyO,YAAc4f,GAGrB7f,gBAL8B,SAKd8f,GACd,IAAMrgB,EAAO7O,EAAEiI,QAAQ6G,UAAY9O,EAAEiI,QAAQknB,SAAWnvB,EAAEiI,QAAQmnB,KAS5DtiB,EAAS,CACboiB,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjBA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjB,EAAG,EAAG,EAAG,EACTA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,IAGbG,EAAMxgB,EAAO,YAAc/B,EAAOyC,KAAK,KAAO,IAAM,GAQ1D,OANKV,GACH+I,QACKC,IAAI,uFAIJwX,GAGTvsB,YAjC8B,SAiClBgQ,EAAIL,GACd,IAAM3O,EAAI2O,EACV,OAAO7R,KAAKyC,SAASyP,EAAIhP,GACvBlD,KAAK+T,YAAY7B,EAAIhP,GAAKlD,KAAK6P,SAASqC,EAAIhP,IAGhD4Z,cAvC8B,WAwC5B,OAAO1D,OAAOsV,QAAQ1uB,KAAKyO,YAAYkgB,qBAGzC3Z,eA3C8B,SA2CfD,GACb,GAAU,IAANA,EAAW,OAAO/U,KAAK8c,gBAE3B,IACI8R,EADEngB,EAAczO,KAAKyO,YAAYogB,qBASrC,OALED,EADyB,mBAAhBngB,EACIA,EAAYsG,GAEZtG,EAGR2K,OAAOsV,QAAQE,O,cCvD1BxvB,EAAEkS,SAAW,CAMXL,OANW,SAMJ6d,GAKL,MAJI,KAAKC,KAAKD,KACZA,EAAMA,EAAIE,QAAQ,KAAM,KAIxB,4BAA8BF,EAA9B,mDACuBA,EADvB,kBAMJhN,cAlBW,SAkBG9Q,EAAWie,GACvB,IAAMpQ,EAAM7N,EAAUiB,cAAc,OAEhC4M,GACFzf,EAAE6C,QAAQ4N,SAASgP,EAAKoQ,IAK5BjQ,YA3BW,SA2BChO,EAAWke,EAAMC,GACtB,KAAKJ,KAAKG,KACbA,EAAO,IAAMA,GAEV,KAAKH,KAAKI,KACbA,EAAO,IAAMA,GAGf,IAAM3Q,EAAMxN,EAAUiB,cAAc,OACpC,GAAIuM,EAAK,CACP,IAAM4Q,EAAU5Q,EAAI6Q,aAAa,gBAAkBH,EAAOC,EAAOD,EAEjE,OADA1Q,EAAItN,aAAa,aAAcke,GACxBA,EAET,OAAO,GAGTtd,YA5CW,SA4CCd,EAAWse,EAAQC,GAC7B,IAAMH,EAAUpe,EAAUqe,aAAa,WAAaC,EAASC,EAASD,EAMtE,OAJAte,EAAUE,aAAa,QAASke,GAC5Bpe,EAAUwe,aAAa,eACzBxe,EAAUE,aAAa,aAAcke,GAEhCA,K,eCnDXhwB,EAAE+G,UAAY,CAEZC,cAFY,SAEE5D,GACZ,IAAIlC,EAAMkC,EAAQjC,KAMlB,OAAe,IAJJD,EACN8C,mBAAmBZ,EAAQW,UAAU,IACrCssB,WAAWnvB,EAAI8C,mBAAmBZ,EAAQW,UAAU,KAEnCX,EAAQjB,aAAawE,S,eCT/C3G,EAAEmQ,WAAa,CAGbmgB,IAHa,SAGTpB,GACF,MAAO,CACLA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAK/DqB,OAZa,SAYNvL,EAAGrF,GACR,IACI/b,EADEE,EAAI,GAGV,IAAKF,EAAI,EAAGA,EAAI,EAAGA,IACjB,IAAK,IAAIiM,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAG1B,IAFA,IAAI2gB,EAAM,EAEDnkB,EAAI,EAAGA,EAAI,EAAGA,IACrBmkB,GAAOxL,EAAE,EAAEphB,EAAIyI,GAAGsT,EAAE,EAAEtT,EAAIwD,GAG5B/L,EAAE,EAAEF,EAAIiM,GAAK2gB,EAIjB,OAAO1sB,GAIT2sB,OAhCa,SAgCNvB,EAAGwB,GACR,MAAO,CACLxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAC/BxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAC/BxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,KAKnCC,OAzCa,SAyCN9L,EAAGqK,GAGR,IAFA,IAAMpiB,EAAS,GAENlJ,EAAI,EAAGuf,EAAI+L,EAAEzpB,OAAQ7B,EAAIuf,EAAGvf,IACnCkJ,EAAOtG,KAAKqe,EAAEqK,EAAEtrB,IAGlB,OAAOkJ,GAGT8jB,cAnDa,SAmDCC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACxC,IAAMlC,EAAI,CACR2B,EAAIE,EAAIE,EACRH,EAAIE,EAAIE,EACR,EAAG,EAAG,GAEJR,EAAI1wB,EAAEmQ,WAAWsgB,OAAOzwB,EAAEmQ,WAAWmgB,IAAIpB,GAAI,CAACiC,EAAIC,EAAI,IAE1D,OAAOpxB,EAAEmQ,WAAWogB,OAAOrB,EAAG,CAC5BwB,EAAE,GAAI,EAAG,EACT,EAAGA,EAAE,GAAI,EACT,EAAG,EAAGA,EAAE,MAIZxmB,QAlEa,SAkELglB,EAAGrqB,EAAGC,GACZ,IAAI4rB,EAAI1wB,EAAEmQ,WAAWsgB,OAAOvB,EAAG,CAACrqB,EAAGC,EAAG,IAEtC,MAAO,CAAC4rB,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,KAG5BtgB,oBAxEa,SAyETihB,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,GAEjB,IAAIvN,EAAI7kB,EAAEmQ,WAAWygB,cAAcS,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClE/R,EAAIngB,EAAEmQ,WAAWygB,cAAcW,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClElD,EAAIlvB,EAAEmQ,WAAWogB,OAAOpQ,EAAGngB,EAAEmQ,WAAWmgB,IAAIzL,IAKhD,OAAO7kB,EAAEmQ,WAAWwgB,OAAO,EAAEzB,EAAE,GAAIA,M,eCrFvClvB,EAAEwN,SAAW,CAEXC,UAFW,SAED5I,EAAGC,GAAiB,IAAd+H,EAAc,uDAAP,MACrB,MAAgB,QAATA,EACHjM,KAAKgN,iBAAiB3B,KAAKkc,MAAMrjB,EAAGD,IACpCoH,KAAKkc,MAAMrjB,EAAGD,IAGpB+I,iBARW,SAQML,GACf,OAAgB,IAARA,EAAetB,KAAKyB,IAG9BS,iBAZW,SAYMZ,GACf,OAAQA,EAAQtB,KAAKyB,GAAM,O,eCb/B1N,EAAEe,MAAQ,CACRC,gBADQ,WAEN,IAAMqO,EAAc,CAClByQ,YAAa,eACbE,aAAc,gBACdE,aAAc,gBACdG,UAAW,aACXmB,YAAa,eACbC,aAAc,gBACdnC,aAAc,gBACdC,UAAW,aACXqD,gBAAiB,oBACjBG,eAAgB,kBAChBK,SAAU,YACVC,WAAY,cACZG,gBAAiB,oBACjBC,qBAAsB,yBACtBc,aAAc,wBACdE,YAAa,eACbG,WAAY,cACZE,aAAc,iBACdC,YAAa,gBACbE,aAAc,gBACdsK,mBACE,qEACFE,qBACE,wEAGJ,GAAK7uB,KAAKR,QAAQiP,YAIhB,IAAK,IAAMkF,KAAOlF,EACXzO,KAAKR,QAAQiP,YAAY8O,eAAe5J,KAC3C3T,KAAKR,QAAQiP,YAAYkF,GAAOlF,EAAYkF,SALhD3T,KAAKR,QAAQiP,YAAcA,EAU7BrP,EAAE6C,QAAQ7B,gBAAgBJ,KAAKR,QAAQiP,cAGzC0E,aA3CQ,SA2CKkb,EAAK1a,EAAK8d,GAErB,MADY,CAAC9d,EAAK8d,GACPhtB,QAAO,SAAS4pB,EAAK5iB,GAC9B,OAAO4iB,GAAOA,EAAI5iB,KACjB4iB,OC7CPqD,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,O","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","const opacitiesAction = L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n initialize(map, overlay, options) {\n this.map = map;\n this.myAction = overlay;\n\n options = options || {};\n options.toolbarIcon = {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks: () => {\n console.warn(this);\n console.warn(this._overlay);\n console.warn(this.overlay);\n console.warn(Cancel.overlay);\n console.warn(this.myAction);\n\n opacitiesAction._overlay.disable();\n // opacitiesAction.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","opacitiesAction","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","myAction","warn","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index dfafc745f..4852b8e98 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -133,9 +133,8 @@ const OpacitiesBar100 = L.EditAction.extend({ const Cancel = L.EditAction.extend({ initialize(map, overlay, options) { - console.log(map); - console.log(overlay); - console.log(map); + this.map = map; + this.myAction = overlay; options = options || {}; options.toolbarIcon = { @@ -149,7 +148,12 @@ const Cancel = L.EditAction.extend({ }, addHooks: () => { - console.warn(opacitiesAction); + console.warn(this); + console.warn(this._overlay); + console.warn(this.overlay); + console.warn(Cancel.overlay); + console.warn(this.myAction); + opacitiesAction._overlay.disable(); // opacitiesAction.disable(); this.disable(); From abbe7214b85ebdb55fe2a4d351dae537520a399f Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 19:52:15 +0200 Subject: [PATCH 38/73] sub-menu test 26 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 19 ++++++------------- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 4b9875684..54deadbdc 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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=this,e=L.OpacitiesAction=L.EditAction.extend({initialize:function(t,e,c){var d,h,m=e.editing,g=m._mode;m._transparent?(d="opacity_empty",h=e.options.translation.makeImageOpaque):(d="opacities",h=e.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===g?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[r,s,a,n,o,i,l]}),L.EditAction.prototype.initialize.call(this,t,e,c)},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),r=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),l=L.EditAction.extend({initialize:function(t,e,i){this.map=t,this.myAction=e,(i=i||{}).toolbarIcon={html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){console.warn(t),console.warn(t._overlay),console.warn(t.overlay),console.warn(l.overlay),console.warn(t.myAction),e._overlay.disable(),t.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){console.warn(this),console.warn(this._overlay),console.warn(this.overlay),console.warn(s.overlay),console.warn(this.myAction),this._overlay.disable(),this.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 6a648f227..7ee20d3f6 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","const opacitiesAction = L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n initialize(map, overlay, options) {\n this.map = map;\n this.myAction = overlay;\n\n options = options || {};\n options.toolbarIcon = {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks: () => {\n console.warn(this);\n console.warn(this._overlay);\n console.warn(this.overlay);\n console.warn(Cancel.overlay);\n console.warn(this.myAction);\n\n opacitiesAction._overlay.disable();\n // opacitiesAction.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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// This entry module is referenced by other modules so it can't be inlined\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__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","opacitiesAction","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","myAction","warn","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n console.warn(this);\n console.warn(this._overlay);\n console.warn(this.overlay);\n console.warn(Cancel.overlay);\n console.warn(this.myAction);\n\n this._overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","warn","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 4852b8e98..c4d3e6af2 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -1,4 +1,4 @@ -const opacitiesAction = L.OpacitiesAction = L.EditAction.extend({ +L.OpacitiesAction = L.EditAction.extend({ initialize(map, overlay, options) { const edit = overlay.editing; const mode = edit._mode; @@ -132,30 +132,23 @@ const OpacitiesBar100 = L.EditAction.extend({ }); const Cancel = L.EditAction.extend({ - initialize(map, overlay, options) { - this.map = map; - this.myAction = overlay; - - options = options || {}; - options.toolbarIcon = { + options: { + toolbarIcon: { html: '✖', tooltip: 'Cancel', className: 'leaflet-toolbar-icon-vertical', style: 'font-size:1.25rem;', - }; - - L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, }, - addHooks: () => { + addHooks() { console.warn(this); console.warn(this._overlay); console.warn(this.overlay); console.warn(Cancel.overlay); console.warn(this.myAction); - opacitiesAction._overlay.disable(); - // opacitiesAction.disable(); + this._overlay.disable(); this.disable(); }, }); From 2cc76f2f82e079171dc5d073751389f86392cd70 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 19:59:14 +0200 Subject: [PATCH 39/73] sub-menu test 27 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 54deadbdc..99cc58708 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){console.warn(this),console.warn(this._overlay),console.warn(this.overlay),console.warn(s.overlay),console.warn(this.myAction),this._overlay.disable(),this.disable()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){console.warn(this),console.warn(this._overlay),console.warn(this.overlay),this.disable(),this._disableAction()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 7ee20d3f6..7e778392d 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n console.warn(this);\n console.warn(this._overlay);\n console.warn(this.overlay);\n console.warn(Cancel.overlay);\n console.warn(this.myAction);\n\n this._overlay.disable();\n this.disable();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","warn","myAction","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n console.warn(this);\n console.warn(this._overlay);\n console.warn(this.overlay);\n\n this.disable();\n this._disableAction();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","warn","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index c4d3e6af2..bd6732fd0 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -145,10 +145,8 @@ const Cancel = L.EditAction.extend({ console.warn(this); console.warn(this._overlay); console.warn(this.overlay); - console.warn(Cancel.overlay); - console.warn(this.myAction); - this._overlay.disable(); this.disable(); + this._disableAction(); }, }); From df794afc230e05b0674449dc8ae0807aa1afc165 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 20:04:30 +0200 Subject: [PATCH 40/73] sub-menu test 28 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 99cc58708..fcfb6e837 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){console.warn(this),console.warn(this._overlay),console.warn(this.overlay),this.disable(),this._disableAction()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){console.warn(this),console.warn(this._overlay),this.disable(),this._overlay._disableAction()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 7e778392d..7e9259345 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n console.warn(this);\n console.warn(this._overlay);\n console.warn(this.overlay);\n\n this.disable();\n this._disableAction();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","warn","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n console.warn(this);\n console.warn(this._overlay);\n\n this.disable();\n this._overlay._disableAction();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","warn","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index bd6732fd0..67cb0571a 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -144,9 +144,8 @@ const Cancel = L.EditAction.extend({ addHooks() { console.warn(this); console.warn(this._overlay); - console.warn(this.overlay); this.disable(); - this._disableAction(); + this._overlay._disableAction(); }, }); From 2df822bf23e39b7d72d528e1da46fb7ed7a048e9 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 20:06:52 +0200 Subject: [PATCH 41/73] sub-menu test 29 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index fcfb6e837..d979b6ea3 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){console.warn(this),console.warn(this._overlay),this.disable(),this._overlay._disableAction()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){console.warn(this),console.warn(this._overlay),this.disable(),this._overlay.disable(),this._overlay._disableAction()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 7e9259345..61cbb64d3 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n console.warn(this);\n console.warn(this._overlay);\n\n this.disable();\n this._overlay._disableAction();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","warn","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n console.warn(this);\n console.warn(this._overlay);\n\n this.disable();\n this._overlay.disable();\n this._overlay._disableAction();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","warn","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 67cb0571a..cafafe01e 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -146,6 +146,7 @@ const Cancel = L.EditAction.extend({ console.warn(this._overlay); this.disable(); + this._overlay.disable(); this._overlay._disableAction(); }, }); From 906edbfa2ad8d6256da599e1e180fe99fce4f828 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 20:22:23 +0200 Subject: [PATCH 42/73] sub-menu test 30 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index d979b6ea3..b35149130 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){console.warn(this),console.warn(this._overlay),this.disable(),this._overlay.disable(),this._overlay._disableAction()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){console.warn(this),console.warn(this._overlay),this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 61cbb64d3..42f4ac30d 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n console.warn(this);\n console.warn(this._overlay);\n\n this.disable();\n this._overlay.disable();\n this._overlay._disableAction();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","warn","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n console.warn(this);\n console.warn(this._overlay);\n\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","warn","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index cafafe01e..70d7c0653 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -146,7 +146,6 @@ const Cancel = L.EditAction.extend({ console.warn(this._overlay); this.disable(); - this._overlay.disable(); - this._overlay._disableAction(); + this.toolbar._hide(); }, }); From 735fd752091714b9fa2f05a2564b0d58767502c7 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 22:05:41 +0200 Subject: [PATCH 43/73] sub-menu test 31 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index b35149130..c067c7a2a 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){console.warn(this),console.warn(this._overlay),this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},this.subToolBar=c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){console.log(this.subToolBar),this.subToolBar}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 42f4ac30d..463b24d08 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\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, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n console.warn(this);\n console.warn(this._overlay);\n\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","warn","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 this.subToolBar = options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n console.log(this.subToolBar);\n if (this.subToolBar) {\n\n }\n // const edit = this._overlay.editing;\n // const link = this._link;\n\n // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolBar","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 70d7c0653..79e320fd9 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -21,10 +21,9 @@ L.OpacitiesAction = L.EditAction.extend({ className: mode === 'lock' ? 'disabled' : '', }; - options.subToolbar = new L.Toolbar2({ + this.subToolBar = options.subToolbar = new L.Toolbar2({ actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel], }); - // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; // L.setOptions(this, options); @@ -32,6 +31,10 @@ L.OpacitiesAction = L.EditAction.extend({ }, addHooks() { + console.log(this.subToolBar); + if (this.subToolBar) { + + } // const edit = this._overlay.editing; // const link = this._link; @@ -142,9 +145,6 @@ const Cancel = L.EditAction.extend({ }, addHooks() { - console.warn(this); - console.warn(this._overlay); - this.disable(); this.toolbar._hide(); }, From 711d0aea45d885fd9bca66007de3218361275f90 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 22:13:08 +0200 Subject: [PATCH 44/73] sub-menu test 32 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index c067c7a2a..d74553e6a 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},this.subToolBar=c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){console.log(this.subToolBar),this.subToolBar}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},this.subToolBar=c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){console.log(this.subToolBar),console.log(this.subToolBar.isPopupOpen()),this.subToolBar}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 463b24d08..16791eaa1 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 this.subToolBar = options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n console.log(this.subToolBar);\n if (this.subToolBar) {\n\n }\n // const edit = this._overlay.editing;\n // const link = this._link;\n\n // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolBar","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 this.subToolBar = options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n console.log(this.subToolBar);\n console.log(this.subToolBar.isPopupOpen());\n if (this.subToolBar) {\n\n }\n // const edit = this._overlay.editing;\n // const link = this._link;\n\n // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolBar","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","isPopupOpen","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 79e320fd9..474862872 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -32,6 +32,7 @@ L.OpacitiesAction = L.EditAction.extend({ addHooks() { console.log(this.subToolBar); + console.log(this.subToolBar.isPopupOpen()); if (this.subToolBar) { } From 81dc243f02269e7ee220dd93e29bb760d798ad6a Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 22:32:44 +0200 Subject: [PATCH 45/73] sub-menu test 33 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index d74553e6a..e44a2741b 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},this.subToolBar=c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){console.log(this.subToolBar),console.log(this.subToolBar.isPopupOpen()),this.subToolBar}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},this.subToolBar=c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){console.log(this.subToolBar),console.log(this.subToolBar.enabled()),this.subToolBar.enabled()?this.subToolBar.disable():this.subToolBar.enabled(),this.subToolBar.enabled()?this.subToolBar.hide():this.subToolBar.show()}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 16791eaa1..48c3ed647 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 this.subToolBar = options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n console.log(this.subToolBar);\n console.log(this.subToolBar.isPopupOpen());\n if (this.subToolBar) {\n\n }\n // const edit = this._overlay.editing;\n // const link = this._link;\n\n // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolBar","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","isPopupOpen","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":"kCAAAA,EAAEC,sBAAwBD,EAAEE,aAAaC,OAAO,CAC9CC,QAAS,CACPC,UAAU,EACVC,WAAY,CACVC,eAAgB,iCAChBC,UAAW,0BACXC,UAAW,kCAIfC,WAV8C,SAUnCN,GACTJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEE,aAAaW,UAAUH,WAAWI,KAAKF,KAAMR,GAC/CJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAKP,SAAWO,KAAKR,QAAQC,UAG/BY,MAlB8C,SAkBxCC,GACJlB,EAAEE,aAAaW,UAAUI,MAAMH,KAAKF,KAAMM,GAE1CN,KAAKO,KAAOD,EAERN,KAAKP,UAAYO,KAAKQ,QAAQC,SAMlCT,KAAKU,GAAG,WAAYV,KAAKW,WAAYX,MACrCA,KAAKU,GAAG,cAAeV,KAAKY,cAAeZ,OAG7Ca,SAjC8C,WAkCxCb,KAAKQ,SAAWR,KAAKQ,QAAQM,UAEjCd,KAAKe,IAAI,WAAYf,KAAKW,WAAYX,MACtCA,KAAKe,IAAI,cAAef,KAAKY,cAAeZ,OAG9CW,WAxC8C,SAwCnCK,GACT,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASR,GAAGO,EAAO,CACnBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASR,GAAGO,EAAMM,aAAc,CAChCC,UAAWxB,KAAKyB,gBAEhBC,YAAa1B,KAAK2B,uBACjB3B,OAGLY,cAvD8C,SAuDhCI,GACZ,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASH,IAAIE,EAAO,CACpBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASH,IAAIE,EAAMM,aAAc,CACjCC,UAAWxB,KAAKyB,gBAChBC,YAAa1B,KAAK2B,uBACjB3B,OAGL2B,sBArE8C,SAqExBX,GAAG,WAClBhB,KAAKP,WAEVuB,EAAEY,iBAEF5B,KAAK6B,WAAU,SAACZ,GACd,IAAMa,EAAOb,EAAMT,QACfS,EAAMM,eAAiBP,EAAEe,QAAUD,EAAKE,YAC1C5C,EAAE6C,QAAQC,YAAYjB,EAAMM,aAAc,aACtC,EAAKY,gBACPlB,EAAMmB,WACN,EAAK5B,QAAQ6B,eAEb,EAAK7B,QAAQ8B,uBAMrBC,YAxF8C,SAwFlCC,GACV,OAAOpD,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAGlDY,aA5F8C,WA8F5C,OADiBnC,KAAK0C,YACNC,KAAK3C,KAAKuC,YAAYK,KAAK5C,QAG7C6C,iBAjG8C,SAiG7B7B,EAAGC,GACdD,EAAE8B,UAEA7B,EAAMT,QAAQwB,WAChB5C,EAAE6C,QAAQC,YAAYlB,EAAEe,OAAQ,aAIhC/B,KAAKmC,eAAkBlB,EAAMmB,WAC1BpC,KAAKQ,QAAQ8B,kBAGtBb,gBA7G8C,SA6G9BT,GAAG,WACZhB,KAAKP,WAEVO,KAAK6B,WAAU,SAACZ,GACVA,EAAMM,eAAiBP,EAAEe,OAC3Bd,EAAMmB,WAEN,EAAKS,iBAAiB7B,EAAGC,MAIzBD,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCI,mBA3H8C,SA2H3BJ,GACjB,IAEIgC,EAFER,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAGZP,KAAKuC,YAAYC,IAEtBxC,KAAK6B,WAAU,SAACZ,GAGd,IAFAA,EAAMgC,iBAAmB,GACzBhC,EAAMmB,WACDY,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACtB,IAAIE,EAAIjC,EAAMkC,UAAUH,GACxB/B,EAAMgC,iBAAiBD,GAAK1C,EAAI8C,mBAAmBF,QAKzD5B,cA5I8C,SA4IhCN,GACZ,IAAMwB,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAEjB,GAAKP,KAAKuC,YAAYC,GAAtB,CAEA,IAAMa,EAAU/C,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDG,EAAQd,EAAQS,iBAAiB,GAAGM,SAASF,GAEnDrD,KAAKwD,4BAA4BF,EAAOd,KAG1CiB,UAxJ8C,WAwJlC,WAGV,OAFiBzD,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAQ,EAAKrB,YAAYtB,IAAmB,SAAT0C,MAIvCE,QAjK8C,SAiKtCrB,GAAS,WAGf,OAFiBxC,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAO3C,IAAUuB,GAAW,EAAKD,YAAYtB,IAAmB,SAAT0C,MAI3DH,4BA1K8C,SA0KlBF,EAAOd,GACjC,IAEIQ,EAFEc,EAAe9D,KAAK6D,QAAQrB,GAC5BuB,EAAI,IAAI3E,EAAE4E,eAAe,GAAIV,EAAMW,EAAG,GAAIX,EAAMY,GAGtDJ,EAAaK,SAAQ,SAAClD,GACpB,IAAImD,EAAc,GAClB,IAAKpB,EAAI,EAAGA,EAAI,EAAGA,IACjBoB,EAAYpB,GAAKe,EAAEM,UAAUpD,EAAMgC,iBAAiBD,IAEtD/B,EAAMqD,qBAAqBF,OAI/BG,kBAxL8C,SAwL5BC,GAIhB,OAHeA,EAAKC,QAAO,SAASC,EAAKC,GACvC,OAAOD,EAAMC,EAAIC,eAChB,GACaJ,EAAKK,QAGvBC,mBA/L8C,WAgM5C,IAAMC,EAAO,CACbA,OAAc,IA4Bd,OA1BA/E,KAAK6B,WAAU,SAASZ,GACtB,GAAIjB,KAAKuC,YAAYtB,GAAQ,CAC3B,IAAI+D,EAAW/D,EAAMgE,OAAOC,IAAIC,MAAM,KAClCC,EAAWJ,EAASA,EAASH,OAAO,GACpCQ,EAAKpE,EAAMqE,aACXC,EAAU,CACZ,CAACC,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,MAE9BX,EAAKY,OAAOC,KAAK,CACfC,GAAI7F,KAAK8F,WAAW7E,GACpBiE,IAAKjE,EAAMgE,OAAOC,IAClBa,MAAO9E,EAAMgE,OAAOc,MACpBC,OAAQ/E,EAAMgE,OAAOe,OACrBC,gBAAiBb,EACjBc,MAAOX,EACPX,aAAcxF,EAAE+G,UAAUC,cAAcnF,QAG3CjB,MAEH+E,EAAKY,OAASZ,EAAKY,OAAOU,UAC1BtB,EAAKuB,iBAAmBtG,KAAKuE,kBAAkBQ,EAAKY,QAE7CZ,KAIX3F,EAAEmH,sBAAwB,SAASV,EAAIrG,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBwG,EAAIrG,K,eClOzCJ,EAAEoH,wBAA0BpH,EAAEqH,aAAalH,OAAO,CAEhDC,QAAS,CACPwG,OAAQ,IACRU,aAAa,EAEbC,aAAc,GACdlH,UAAU,EACVkE,KAAM,UACNiD,UAAU,GAGZ9G,WAZgD,SAYrC+G,EAAKrH,GACdJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAK2G,aAAe3G,KAAKR,QAAQmH,aACjC3G,KAAKP,SAAWO,KAAKR,QAAQC,SAC7BO,KAAK8G,UAAY9G,KAAKR,QAAQoH,SAC9B5G,KAAK+G,KAAOF,EACZ7G,KAAKgH,SAAW,IAGlB3G,MAvBgD,SAuB1CC,GAAK,WACTN,KAAKO,KAAOD,EACPN,KAAKuB,cAAgBvB,KAAKiH,aAE/B3G,EAAII,GAAG,YAAaV,KAAKkH,OAAQlH,MAE7BA,KAAKR,QAAQ+F,UACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QACzBjF,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAYV,KAAKuH,aAAcvH,OAK1CZ,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAAQ,WAIvC,GAHA,EAAKiG,UAAUC,YAAY,EAAKlG,cAChC,EAAKmG,uBAED,EAAKlI,QAAQwH,SAAU,CACzB,IAAMW,EAAQ,EAAKnI,QAAQwH,SAASY,IAAM,MAAQ,MAClD,EAAKC,SAAS,EAAKrI,QAAQwH,SAASW,GAAQA,QAE5C,EAAKX,SAAW,CAACY,IAAK,EAAGE,IAAK,GAC9B,EAAKZ,SAIF,EAAKC,UACJ7G,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAY,EAAK6G,aAAc,GAK1C,IAAMQ,EAAe,EAAKC,cACtBD,GACF,EAAKE,GAAKF,EAAaG,OAAOC,KAAKJ,GAAc,IAC7C,EAAKE,GAAGxI,UAAY,EAAKe,QAAQC,WAEjC,EAAKhB,UAAY,EAAKe,QAAQC,SAClC,EAAKwH,GAAK,SAId7I,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACvDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MAMGM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAG7CA,KAAK6I,KAAK,QAGZhI,SArFgD,SAqFvCP,GACPlB,EAAE8B,SAASH,IAAIf,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACxDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MACHZ,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAExCA,KAAKQ,SAAWR,KAAKQ,QAAQM,UACjCd,KAAK6I,KAAK,UAEVzJ,EAAEqH,aAAaxG,UAAUY,SAASX,KAAKF,KAAMM,IAG/CoH,qBApGgD,WAqG9C,IAAMpH,EAAMN,KAAKO,KACXuI,EAAqB1J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,SAC3DyH,EAAsB5J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,UAC5D0H,EACFC,SAASJ,GAAsBI,SAASF,GACtCG,EAAcnJ,KAAKR,QAAQwG,OAC3BoD,EAAaF,SAASD,EAAcE,GACpCE,EAAS/I,EAAIgJ,QAAQhJ,EAAIiJ,aACzBC,EAASpK,EAAEqK,MAAML,EAAYD,GAAaO,SAAS,GACrD1J,KAAKR,QAAQ+F,QACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QAE7BvF,KAAKmH,SAAW,CACd7G,EAAIqJ,UAAUN,EAAO9F,SAASiG,IAC9BlJ,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIJ,KAI7BxJ,KAAK6J,mBAAqB,CACxB,OAAUR,EACV,OAAUG,EACV,KAAQlJ,EAAIwJ,WAGd9J,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,gBAGrCoD,aAlIgD,SAkInC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKoC,YAIvCkG,sBAvIgD,WAwI9C,IAAMhI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAC5CZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKoC,SAAUpC,OAGnDwI,qBA7IgD,WA8I9C,IAAMlI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAC3CZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKoC,SAAUpC,OAGpDkK,WAnJgD,WAoJ9C,OAAOlK,KAAK8G,WAGd1E,SAvJgD,WAwJ9C,IAAMN,EAAO9B,KAAKQ,QAClB,GAAKsB,EAAKE,UAOV,OALAF,EAAKQ,iBACLR,EAAKqI,eAELnK,KAAK8G,WAAY,EACjB9G,KAAK6I,KAAK,YACH7I,MAGToI,OAnKgD,SAmKzCpH,GACL,IAAMc,EAAO9B,KAAKQ,QACZyH,EAAKjI,KAAKiI,GAEhB,GAAKnG,EAAKE,UAAV,CAYA,GAXIhB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,GAGpChB,KAAKoK,wBAELpK,KAAK8G,WAAY,EACjBhF,EAAKO,cACLP,EAAKuI,eACLrK,KAAK6I,KAAK,WAGNZ,IAAMA,EAAG9F,eAKb,OAAOnC,KAJLA,KAAKoC,aAOTgI,sBA3LgD,WA4L9CpK,KAAKO,KAAKsB,WAAU,SAACZ,GACfA,aAAiB7B,EAAEoH,yBACrBvF,EAAMmB,eAKZkI,UAnMgD,SAmMtCC,EAAQC,GAChB,IAAM1I,EAAO9B,KAAKQ,QAalB,OAXAR,KAAKmH,SAASoD,GAAUC,EAExBxK,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT8K,sBApNgD,SAoN1BC,EAAMR,EAAQjK,GAClC,OAAIA,EAAId,QAAQwL,IAAIC,QAAU7L,EAAE8L,IAAID,SAKrB,IAATF,GACFI,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI,EACrCkH,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,GAAK,MAEzCiH,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI6G,EAAO,EAC5CK,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,EAAImH,KAAKC,IAAI,EAAGP,IAAS,KAEvDI,GAAcC,GATtB,IAAID,EACAC,GAYRG,WArOgD,SAqOrCC,GACT,IAAMlL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAGR,IAAK,IAAIyI,KAAKD,EACZ,GAAIxL,KAAK8K,sBAAsBC,EAAMS,EAAUC,GAAInL,GAIjD,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAI4C,KAAKD,EACZxL,KAAKmH,SAASnE,GAAKwI,EAAUC,GAC7BzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGTsE,qBAtQgD,SAsQ3BoH,GACnB,IAAMpL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAER,IAAK,IAAIyI,KAAKC,EAAW,CACvB,IAAMnB,EAASjK,EAAIqL,mBAAmBD,EAAUD,IAEhD,GAAIzL,KAAK8K,sBAAsBC,EAAMR,EAAQjK,GAI3C,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAI4C,KAAKC,EACZ1L,KAAKmH,SAASnE,GAAK1C,EAAIqL,mBAAmBD,EAAUD,IACpDzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT4L,QAxSgD,SAwSxCC,GACN,IAEI7I,EACAe,EAHEzD,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAG5BuC,EAAgB,GAEpB,GAAc,IAAVD,EAAJ,CAEA,IAAK7I,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EACCgJ,QAAQtJ,KAAKmD,UAAUH,IACvBO,SAAS8F,GACT0C,WAAWF,GACXjC,IAAIP,GACTyC,EAAc9I,GAAK1C,EAAIqJ,UAAU5F,GAKnC,OAFA/D,KAAKuL,WAAWO,GAET9L,OAGTgM,SA/TgD,WA+TzB,IAAdC,EAAc,uDAAP,MACRC,EAASlM,KAAKuB,aAAa4K,MAAM/M,EAAE6C,QAAQmK,WAC5CjH,MAAM,YAAY,GAClBkH,MAAM,GAAI,GACVlH,MAAM,KAELmH,EAAQJ,EAAO,GACfK,EAAQL,EAAO,GACfM,EAAQN,EAAO,GACfO,EAAQP,EAAO,GAEfQ,EAAcJ,EAAQG,EAAQF,EAAQC,EAExCG,EAAQvN,EAAEwN,SAASC,UAAUP,EAAOC,EAAO,OAU/C,OARIG,EAAc,IAChBC,GAASA,EAAQ,EAAItB,KAAKyB,IAAMzB,KAAKyB,IAGnCH,EAAQ,IACVA,EAAQ,EAAItB,KAAKyB,GAAKH,GAGR,QAATV,EACHZ,KAAK0B,MAAM3N,EAAEwN,SAASI,iBAAiBL,IACvCvN,EAAE6N,KAAKC,UAAUP,EAAO,IAG9B9E,SA3VgD,SA2VvC8E,GAAqB,IAAdV,EAAc,uDAAP,MACfkB,EAAenN,KAAKgM,SAASC,GAC7BmB,EAAkBT,EAAQQ,EAGhC,OAFAnN,KAAKqN,SAASD,EAAiBnB,GAExBjM,MAGTqN,SAnWgD,SAmWvCV,GAAqB,IAIxB3J,EACAe,EACAuJ,EANUrB,EAAc,uDAAP,MACf3L,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAC5BhE,EAAU,GASd,IAJa,QAAT0G,IACFU,EAAQvN,EAAEwN,SAASW,iBAAiBZ,IAGjC3J,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAAS8F,GAC5CiE,EAAIlO,EAAEqK,MACF4B,KAAKmC,IAAIb,GAAS5I,EAAEE,EAAIoH,KAAKoC,IAAId,GAAS5I,EAAEG,EAC5CmH,KAAKoC,IAAId,GAAS5I,EAAEE,EAAIoH,KAAKmC,IAAIb,GAAS5I,EAAEG,GAEhDqB,EAAQvC,GAAK1C,EAAIqJ,UAAU2D,EAAE1D,IAAIP,IAKnC,OAFArJ,KAAKuL,WAAWhG,GAETvF,MAGT0N,OA7XgD,SA6XzCC,EAAaC,GAClB,IACI5K,EACAe,EAFEzD,EAAMN,KAAKO,KAGbsN,EAAe,GACbvK,EAAQhD,EAAIgJ,QAAQqE,GAAapK,SAASjD,EAAIgJ,QAAQsE,IAE5D,IAAK5K,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAASD,GAC5CuK,EAAa7K,GAAK1C,EAAIqJ,UAAU5F,GAGlC/D,KAAKuL,WAAWsC,IAGlBC,QA5YgD,WAwZ9C,IAXA,IAAMxN,EAAMN,KAAKO,KACX8I,EAASrJ,KAAK6J,mBAAmBR,OACjCG,EAASxJ,KAAK6J,mBAAmBL,OACjCuB,EAAO/K,KAAK6J,mBAAmBkB,KAC/BxF,EAAU,CACd8D,EAAO9F,SAASiG,GAChBH,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,IACrCmF,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,IACrCmF,EAAOO,IAAIJ,IAGJxG,EAAI,EAAGA,EAAI,EAAGA,IAChB1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,GAAMgD,OAAO/N,KAAKmD,UAAUH,KACzDhD,KAAKsK,UAAUtH,EAAG1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,IAOhD,OAHA/K,KAAK6K,QAAS,EACd7K,KAAK6I,KAAK,WAEH7I,MAKTgO,oBAtagD,SAsa5BvE,GAOlB,IAAMwE,EAAO7O,EAAEiI,QAAQ6G,SAEjBC,GAASF,EAAO,KAAO,IAAM,IAEnC,MAHa,aAAeA,EAAO,KAAO,IAAM,IAGlCxE,EAAMxF,EAAI,MAAQwF,EAAMvF,EAAI,KAAOiK,GAGnDjH,OApbgD,WAqb9C,IAAM5G,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACb6B,EAAqBhE,EAAEwD,KAAKtC,EAAI8C,mBAAoB9C,GACpD+N,EAAkBrO,KACnBsO,8BAA8BlL,GAC7BC,EAAUD,EAAmBpD,KAAKmD,UAAU,IAC5CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,KAK5DP,EAAMjC,MAAM/M,EAAE6C,QAAQmK,UAAY,WAAa,QAE/CpM,KAAKgH,SAASY,IAAM5H,KAAKgM,WACzBhM,KAAKgH,SAASc,IAAM9H,KAAKgM,SAAS,QASpCzE,aAldgD,SAkdnCqH,GACX,IAAMtO,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACbsN,EAAwB,SAASrE,GACrC,OAAOlK,EAAIwO,uBAAuBtE,EAAQoE,EAAM7D,KAAM6D,EAAMvF,SAExDgF,EAAkBrO,KAAKsO,8BACzBO,GAEExL,EAAUwL,EAAsB7O,KAAKmD,UAAU,IAC/CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,MAG9DrJ,WAregD,WAse9C,OAAOtF,KAAKmH,UAGdhE,UAzegD,SAyetCH,GACR,OAAOhD,KAAKmH,SAASnE,IAIvBuG,UA9egD,WA+e9C,IAAMjJ,EAAMN,KAAKO,KACXkE,EAASzE,KAAKsF,aAAab,QAAO,SAASsK,EAAKxE,GACpD,OAAOwE,EAAInF,IAAItJ,EAAIgJ,QAAQiB,MAC1BnL,EAAEqK,MAAM,EAAG,IACd,OAAOnJ,EAAIqJ,UAAUlF,EAAOiF,SAAS,KAGvC4E,8BAtfgD,SAsflBU,GAI5B,IAIIC,EAJEzF,EAASwF,EAAkBhP,KAAKmD,UAAU,IAC1C+L,EAAIlP,KAAKuB,aAAa4N,aAAe,IACrCC,EAAIpP,KAAKuB,aAAa8N,cAAgB,IACxCnM,EAAI,GAGR,IAAK+L,EAAI,EAAGA,EAAI,EAAGA,IACjB/L,EAAE0C,KAAKoJ,EAAkBhP,KAAKmD,UAAU8L,IAAIK,UAAU9F,IAcxD,OAAOpK,EAAEmQ,WAAWC,oBAChB,EAAG,EAAGtM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAG,EAAGhM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnB,EAAGkL,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAGE,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,MAK3B9E,EAAEqQ,wBAA0B,SAAS5J,EAAIrG,GACvC,OAAO,IAAIJ,EAAEoH,wBAAwBX,EAAIrG,IAG3CJ,EAAEsQ,IAAIC,aAAY,WACXvQ,EAAE6C,QAAQQ,SAASzC,KAAK4P,eAAgB,QAC3CxQ,EAAE6C,QAAQ4N,SAAS7P,KAAK4P,eAAgB,W,0BC9hB5CxQ,EAAE6C,QAAU7C,EAAE6C,SAAW,GACzB7C,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBqF,UAAY3Q,EAAE4Q,QAAQzQ,OAAO,CAE9CC,QAAS,CACPyQ,SAAU,YAGZnQ,WAN8C,SAMnCQ,EAAKd,GACdQ,KAAKO,KAAOD,EACZlB,EAAEW,WAAWC,KAAMR,IAGrB0Q,SAX8C,WAYvClQ,KAAKmQ,aACRnQ,KAAKoQ,WAAapQ,KAAKqQ,kBACvBrQ,KAAKsQ,eAAiBtQ,KAAKuQ,QAC3BvQ,KAAKwQ,SAAWxQ,KAAKyQ,gBACrBzQ,KAAK0Q,WAAW1Q,KAAKoQ,WAAYpQ,KAAKsQ,eAAgBtQ,KAAKwQ,UAE3DpR,EAAE8B,SAASR,GAAGV,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE7DZ,EAAE8B,SAAS0P,wBAAwB5Q,KAAKoQ,YACxChR,EAAE8B,SAAS2P,yBAAyB7Q,KAAKoQ,cAI7CU,YAzB8C,WA0BxC9Q,KAAKmQ,aACP/Q,EAAE8B,SAASH,IAAIf,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE9DZ,EAAE6C,QAAQ8O,OAAO/Q,KAAKwQ,UACtBpR,EAAE6C,QAAQ8O,OAAO/Q,KAAKsQ,gBACtBlR,EAAE6C,QAAQ8O,OAAO/Q,KAAKoQ,YACtBpQ,KAAKmQ,YAAa,IAItBE,gBApC8C,WAqC5C,IAAMW,EAAY5R,EAAE6C,QAAQgP,OAAO,MAAO,sBAC1CD,EAAUE,aAAa,KAAM,iBAE7B,IAAMC,EAAU/R,EAAE6C,QAAQgP,OAAO,KAAM,WAGvC,OAFAD,EAAUvJ,YAAY0J,GAEfH,GAGTP,cA9C8C,WA+C5C,IAAMW,EAAUhS,EAAE6C,QAAQgP,OAAO,IAAK,IAUtC,OATAG,EAAQC,UAAYjS,EAAEkS,SAASL,OAAO,iBAEtCG,EAAQF,aAAa,KAAM,oBAC3BE,EAAQF,aAAa,OAAQ,KAC7BE,EAAQF,aAAa,QAAS,eAE9BE,EAAQF,aAAa,OAAQ,UAC7BE,EAAQF,aAAa,aAAc,eAE5BE,GAGTb,MA5D8C,WA6D5C,IAAMgB,EAAOnS,EAAE6C,QAAQgP,OAAO,MAAO,IAIrC,OAHAM,EAAKL,aAAa,KAAM,qBACxBK,EAAKpF,MAAMqF,QAAU,OAEdD,GAGTb,WApE8C,SAoEnCM,EAAWO,EAAME,GAC1BzR,KAAKmQ,WAAa/Q,EAAEsS,QAAQ,CAACzB,SAAUjQ,KAAKR,QAAQyQ,WAEpDjQ,KAAKmQ,WAAW9P,MAAQ,WAuBtB,OAtBA2Q,EAAUvJ,YAAY8J,GACtBA,EAAKI,mBACD,YACA,k3CAkBJX,EAAUvJ,YAAYgK,GACfT,GAGThR,KAAKmQ,WAAWyB,MAAM5R,KAAKO,OAG7BoQ,iBApG8C,SAoG7B3P,GACfA,EAAEY,iBAEF5B,KAAKoQ,WAAWyB,UACgB,kCAA9B7R,KAAKoQ,WAAWyB,UACd,qCACA,gCAGJ7R,KAAKsQ,eAAenE,MAAMqF,QACc,SAAtCxR,KAAKsQ,eAAenE,MAAMqF,QAAqB,QAAU,OAG3DxR,KAAKwQ,SAASa,UACgB,UAA5BrR,KAAKwQ,SAASa,UACZjS,EAAEkS,SAASL,OAAO,iBAClB,QAGJ7R,EAAEkS,SAASQ,YAAY9R,KAAKwQ,SAAU,cAAe,eACrDpR,EAAE6C,QAAQC,YAAYlC,KAAKwQ,SAAU,eAGvCuB,eA3H8C,WA4H5C,IAAIC,SAASC,cAAc,sBAA3B,CAEA,IAAMC,EAAK9S,EAAE6C,QAAQgP,OAAO,MAAO,IACnCiB,EAAGrM,GAAK,oBACRqM,EAAGhB,aAAa,SAAU,UAE1BlR,KAAKmS,UAAW,IAAI/S,EAAEgT,kBAAmBC,SACzCH,EAAGb,UAAYrR,KAAKmS,SAEpBH,SAASC,cAAc,8BAA8BxK,YAAYyK,OAIrE9S,EAAEsL,iBAAiBqF,UAAUJ,aAAY,WACvCvQ,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACrClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACvClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GAAK,EAC5C,EAGgD,IAA9ClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,IAAalT,EAAEiI,QAAQkL,SAChE,EAAK9R,SACL,EAAKsR,qBAIT3S,EAAE0Q,iBAAiB0C,UAAY,SAAClS,EAAKd,GACnC,OAAO,IAAIJ,EAAEsL,iBAAiBqF,UAAUzP,EAAKd,K,eC3J/CJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEC,sBAAsBoT,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CAC9CC,QAAS,CACPkT,OAAQtT,EAAE0Q,iBAAiB6C,kBAG7B7S,WAL8C,SAKnC8S,EAAOpT,GAChBQ,KAAK6S,OAASD,EACd5S,KAAK8S,YAAcF,EAAMpT,QAAQE,WAEjCN,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB6C,iBAAiBI,OAAS,iBAG/C7C,SAd8C,WAe5C,IACM5P,EADQN,KAAK6S,OACDtS,KAElBP,KAAKgT,YAAchT,KAAKR,QAAQyT,QAChCjT,KAAKkT,YACD9T,EAAEwD,KAAKxD,EAAEe,MAAMgT,aAAanT,KAAM,cAAe,aACjDA,KAAKoT,YAAapT,MAEtBZ,EAAE8B,SAASR,GAAGsR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE9CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAGlDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQC,aAG/CqQ,YAxC8C,WAyC5C,IACMxQ,EADQN,KAAK6S,OACDtS,KAElBnB,EAAE8B,SAASH,IAAIiR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE/CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MAGnDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAKsT,gBACLtT,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQM,cAG/CL,OA9D8C,WAiE5C,OAFAT,KAAKyT,UAAW,EAChBzT,KAAKkQ,WACElQ,MAGTc,QApE8C,WAuE5C,OAFAd,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAGTqT,WA1E8C,SA0EnCrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KAExB3T,KAAK0T,IAEN1T,KAAK6S,OAAO1Q,gBACdnC,KAAK0T,GAAaxT,KAAKF,OAI3B0I,aArF8C,SAqFjC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKsT,cAActS,IAIrDsH,sBA1F8C,WA2F5C,IAAMhI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MACjDZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKsT,cAAetT,OAGxDwI,qBAhG8C,WAiG5C,IAAMlI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAChDZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKsT,cAAetT,OAGzDsT,cAtG8C,SAsGhCtS,GACZ,IAAI4S,EAEA5S,IAAK4S,EAAK5S,EAAE6S,eAKZD,IAAOA,EAAG9Q,UAAY8Q,EAAG7R,kBAAkB+R,oBAI/C9T,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB7B,EAAE6C,QAAQ8R,YAAY9S,EAAMM,aAAc,aAC1CN,EAAMmB,cAGRpC,KAAKsC,iBAEDtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCgT,aA5H8C,WA4H/B,WACRhU,KAAKiU,QAAQ7U,EAAE8U,eAEpBlU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd2T,UAELlT,EAAMmB,gBAKZgS,WAzI8C,WAyIjC,WACNpU,KAAKiU,QAAQ7U,EAAEiV,aAEpBrU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd8T,QAELlV,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CiS,gBAtJ8C,SAsJ9BxS,GAAG,WACXuT,EAAMvT,EAAEwT,iBACRlU,EAAMN,KAAK6S,OAAOtS,KAExBP,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB,IAAMa,EAAOb,EAAMT,QAEfS,EAAMiJ,cAAgBjJ,EAAMmB,WAEhC,IAAM2I,EAAOzK,EAAIwJ,UACXT,EAAS/I,EAAIiJ,YACfkL,EAAYrV,EAAE4K,aAAa/I,EAAMkC,UAAU,GAAIlC,EAAMkC,UAAU,IAEnEsR,EAAYnU,EAAIoU,8BAA8BD,EAAW1J,EAAM1B,GAC3DkL,EAAII,WAAWF,IAAc3S,EAAKE,YAC/B,EAAKyI,SAAW,EAAKpI,cAC1BjD,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CqT,aA3K8C,SA2KjC5T,GAAG,WACd,GAAKhB,KAAKiU,QAAQ7U,EAAEyV,cAApB,CAEA,IAAMC,EAAiB9U,KAAK6S,OAAOpP,YAC7BsR,EAAID,EAAejQ,OAEf,IAANkQ,IAEW3V,EAAE6C,QAAQ+S,eAAeD,KAGtCD,EAAe3Q,SAAQ,SAAClD,GACtB,EAAK4R,OAAOoC,YAAYhU,MAErBjB,KAAK6S,OAAO1Q,gBACfnC,KAAKsC,kBAILtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,MAGtCkU,aAjM8C,WAkMvClV,KAAKmV,mBACRnV,KAAK8S,YAAYsC,gBAAaC,GAGhCC,cAActV,KAAKuV,iBAGrBlT,YAzM8C,WA0M5C,IAAMuQ,EAAQ5S,KAAK6S,OACbvS,EAAMsS,EAAMrS,KAEdqS,EAAMpT,QAAQgW,iBAAmBxV,KAAKyK,UAE1CzK,KAAKyK,QAAUrL,EAAE0Q,iBAAiB2F,WAAW,CAC3CxC,QAASjT,KAAKgT,YACd/C,SAAU,YACT2B,MAAMtR,EAAKsS,KAGhBtQ,eArN8C,WAsN5C,IAAMhC,EAAMN,KAAK6S,OAAOtS,KACxB,IAAIP,KAAKyK,QAIP,OAAO,EAHPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,GAMnBwJ,QA/N8C,SA+NtCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDE,QAnO8C,SAmOtCF,GAMN,MALwB,yBAApBA,EAAMG,WAAyC7V,KAAKiU,QAAQyB,KAC9D1V,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,eAEArC,MAGT8V,WA5O8C,SA4OnCJ,GAAO,WAWhB,OAVA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,OAAI,EAAKhD,YAAYgD,KAASN,IAC5B,EAAKpT,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,eACE,MAKJrC,MAGToT,YA1P8C,WA0PhC,WACZ,GAAKpT,KAAKiU,QAAQ7U,EAAE8W,cAEpB,OAAO,IAAIC,SAAQ,SAACC,GAClB,IAGIxW,EAHEyW,EAAO,EAAKvD,YAClBuD,EAAKD,QAAUA,EAGf,EAAKb,eAAiB,KAmEtB,EAAKJ,mBAAqBkB,EAAKjB,WAC1B,EAAKD,mBACRkB,EAAKjB,WAAa,EAAKvC,OAAO/N,qBAAqBa,QAGrD0Q,EAAKC,UAAYD,EAAKC,WAAa,IACnCD,EAAKxK,MAAQwK,EAAKxK,OAAS,IAC3BwK,EAAKE,QAAUF,EAAKE,SAvEI,SAACC,IACvBA,EAAOC,KAAKC,MAAMF,IAETG,aACH/W,IAAc4W,EAAKG,YAAcH,EAAKG,WAAWC,MAAM,WAIzDhX,EAAY4W,EAAKG,YAIC,aAAhBH,EAAKK,SACPvB,cAAc,EAAKC,gBAEd,EAAKJ,mBACR,EAAKrC,YAAYsC,gBAAaC,GAGhCe,IACiB,OAAbI,EAAKM,KACPC,MAAM,qBAAuBV,EAAKxW,UAAY2W,EAAKM,MAMvDE,QAAQC,IAAIT,KA6ChBH,EAAKa,gBAAkBb,EAAKa,iBAvCI,SAACV,GAC/B5W,EAAYyW,EAAKzW,UAAY4W,EAE7B,EAAKjB,eAAiB4B,aAAY,WAChC,IACMC,EAAM,IAAIC,QAAJ,UAAezX,EAAf,YAA4B0X,KAAKC,OAD7B,CAACC,OAAQ,QAEzBC,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKrB,EAAKE,WACZF,EAAKC,YA6BVD,EAAKyB,eAAiBzB,EAAKyB,gBAzBI,SAACC,GAC9B,IAAMC,EAAO,IAAIC,SACjBD,EAAKE,OAAO,aAAczB,KAAK0B,UAAUJ,EAAW3C,aACpD4C,EAAKE,OAAO,QAASH,EAAWlM,OAChCmM,EAAKE,OAAO,UAAU,GAEtB,IAAME,EAAU,CAACZ,OAAQ,OAAQa,KAAML,GACjCZ,EAAM,IAAIC,QAAQU,EAAWpY,eAAgByY,GACnDX,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKK,EAAWb,kBAerBb,EAAKyB,eAAezB,SAK1BjX,EAAEmH,sBAAsBzE,KAAO,SAAC8Q,EAAOpT,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBoT,KAAKG,EAAOpT,K,eCzVjDJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEsL,iBAAiB+H,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CACzCC,QAAS,CACP8Y,QAAS,GACTC,QAAS,gBACT7F,OAAQtT,EAAE0Q,iBAAiB0I,YAG7B1Y,WAPyC,SAO9B0C,EAAShD,GAClBQ,KAAKyY,SAAWjW,EAChBxC,KAAK0Y,eAAgB,EACrB1Y,KAAK4D,MAAQpB,EAAQhD,QAAQmE,KAC7B3D,KAAK2Y,cAAe,EACpB3Y,KAAK4Y,WAAY,EAEjBxZ,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB0I,WAAWzF,OAAS,aAIzC7C,SApByC,WAqBvC,IAAM1N,EAAUxC,KAAKyY,SAErBzY,KAAKgT,YAAchT,KAAKR,QAAQyT,QAGhCzQ,EAAQqW,eACR7Y,KAAK8Y,aACL9Y,KAAK+Y,eACL/Y,KAAKgZ,4BAGDxW,EAAQ0H,eAAiB1H,EAAQhD,QAAQgW,iBAC3CxV,KAAKqC,cAGPrC,KAAKiZ,cAAczW,EAAQyF,IAAKzF,EAAQyF,GAExC7I,EAAE8B,SAASR,GAAG8B,EAAQjB,aAAc,CAClC2X,SAAUlZ,KAAKmZ,UACdnZ,MAEHZ,EAAE8B,SAASR,GAAG0Y,OAAQ,UAAWpZ,KAAKqT,WAAYrT,OAIpD8Q,YA9CyC,WA+CvC,IAAMtO,EAAUxC,KAAKyY,SACfxQ,EAAKjI,KAAKiZ,YAOhB,IAAK,IAAII,KAJTrZ,KAAKsZ,mBAEDtZ,KAAKyK,SAAWzK,KAAKsC,iBAENtC,KAAKuZ,SACtBna,EAAE6C,QAAQ8O,OAAOsI,GAOfja,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAC3CnC,EAAE6C,QAAQ8R,YAAYvR,EAAQjB,aAAc,aAG1C0G,IAAQA,EAAG9F,gBAAkB8F,EAAGzH,QAAQiK,SAC1CxC,EAAGzH,QAAQ8B,iBAGblD,EAAE8B,SAASH,IAAIyB,EAAQjB,aAAc,CACnC2X,SAAUlZ,KAAKmZ,UACdnZ,MAEHZ,EAAE8B,SAASH,IAAIqY,OAAQ,UAAWpZ,KAAKqT,WAAYrT,OAGrDc,QA9EyC,WA+EvC,OAAKd,KAAKyT,UAEVzT,KAAKyY,SAASrW,WACdpC,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MALsBA,MAQ/B8Y,WAvFyC,WA2FvC,IAAK,IAAInV,KAHT3D,KAAKwZ,OAAS,GAGGpa,EAAEsL,iBAAiB+H,KAAKgH,MAAO,CAC9C,IAAI9D,EAASvW,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,IACD,IAAtC3D,KAAKgT,YAAY0G,QAAQ/D,KAC3B3V,KAAKwZ,OAAO7V,GAAQgS,GAMnB3V,KAAKwZ,OAAOxZ,KAAK4D,SACpB5D,KAAK4D,MAAQsE,OAAOC,KAAKnI,KAAKwZ,QAAQ,KAK1CT,aA1GyC,WA2GvC,IACI/V,EADER,EAAUxC,KAAKyY,SAIrB,IADAzY,KAAK2Z,aAAeva,EAAEwa,aACjB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAK2Z,aAAaE,SAASza,EAAE0a,WAAWtX,EAASQ,IAInD,IADAhD,KAAK+Z,cAAgB3a,EAAEwa,aAClB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAK+Z,cAAcF,SAASza,EAAE4a,YAAYxX,EAASQ,IAIrD,IADAhD,KAAKia,gBAAkB7a,EAAEwa,aACpB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKia,gBAAgBJ,SAASza,EAAE8a,cAAc1X,EAASQ,IAIzD,IADAhD,KAAKma,eAAiB/a,EAAEwa,aACnB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKma,eAAeN,SAASza,EAAEgb,aAAa5X,EAASQ,IAKvD,IADAhD,KAAKqa,mBAAqBjb,EAAEwa,aACvB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKqa,mBAAmBR,SAASza,EAAEkb,iBAAiB9X,EAASQ,IAI/D,IADAhD,KAAKua,aAAenb,EAAEwa,aACjB5W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKua,aAAaV,SAASza,EAAEob,WAAWhY,EAASQ,EAAG,CAACyX,WAAW,KAGlEza,KAAKuZ,SAAW,CACdlY,KAAMrB,KAAK2Z,aACX9N,MAAO7L,KAAK+Z,cACZW,QAAS1a,KAAKia,gBACdU,OAAQ3a,KAAKma,eACbS,WAAY5a,KAAKqa,mBACjBQ,KAAM7a,KAAKua,eAIfvB,0BAvJyC,WAwJvC,IAAM8B,EAAK9a,KAAKyY,SAGXzY,KAAK4D,OAKV5D,KAAK+a,iBAEAD,EAAG5Q,cAAgBlK,KAAKgb,eAC3Bhb,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASpa,aAGtCd,KAAKmb,OAAO,SAAWnb,KAAKob,mBAZ/Bpb,KAAKob,mBAeT/H,WA3KyC,SA2K9BrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KACvBmH,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAEZhR,GAAMA,EAAG9F,qBAEakT,IAAtBrV,KAAK0T,IAA+BoH,EAAGtb,QAAQgW,iBAC7CsF,EAAG5Q,cAAgBlK,KAAKyK,SAC1BzK,KAAK0T,GAAaxT,KAAKF,OAK7Bqb,YA1LyC,SA0L7BC,EAAKC,GAAM,WACrB,MAAuB,yBAAnBA,EAAK1F,WAAwC7V,KAAKiU,QAAQsH,IAG9Dvb,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASuF,EAAK,CAIhB,IAAK,IAAI3X,KAHT,EAAKrB,iBACL,EAAK0Q,YAAYgD,GAAOuF,EACxB,EAAKlZ,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU2X,UACnC,EAAK9B,OAAO7V,GACnB,EAAK6X,YAAY7X,IACRvE,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU4X,IACjD,EAAK/B,OAAO7V,GAAQ4X,GAGxB,OAAO,MAfFvb,MAqBX4V,QAjNyC,SAiNjCF,GACN,GAAwB,yBAApBA,EAAMG,YAAyC7V,KAAKiU,QAAQyB,GAAQ,CAItE,IAAK,IAAI/R,KAHT3D,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU+R,IAC1C1V,KAAKwZ,OAAO7V,GAAQ+R,GAGnB1V,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBAE1C,OAAOtC,MAGTiU,QAhOyC,SAgOjCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDI,WApOyC,SAoO9BJ,GAAO,WAgBhB,OAfA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASL,EAAO,CAIlB,IAAK,IAAI/R,KAHT,EAAKrB,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,cACYjD,EAAEsL,iBAAiB+H,KAAKgH,MACnCra,EAAEsL,iBAAiB+H,KAAKgH,MAAM9V,KAAU+R,WACnC,EAAK8D,OAAO7V,GACnB,EAAK6X,YAAY7X,IAGrB,OAAO,MAGN3D,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBACjCtC,MAITwb,YAxPyC,SAwP7B7X,GACN3D,KAAKmb,OAAOxX,KACVuE,OAAOC,KAAKnI,KAAKyb,YAAY5W,QAAU,EACzC7E,KAAKmZ,YAEQ,SAATxV,GAAmB3D,KAAKob,kBAC5Bpb,KAAK4D,MAAQ,GACb5D,KAAK+a,mBAKXzY,eApQyC,WAqQvC,IACIhC,EADON,KAAKyY,SACHlY,KAETP,KAAKyK,UACPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,IAInB2Q,gBA9QyC,WA8QvB,WACZ5Y,EAAUxC,KAAKyY,SACbnY,EAAMkC,EAAQjC,KAEpBP,KAAKkb,SAAW,IAAI9b,EAAEsc,UAAUlZ,EAAQjB,cACxCvB,KAAKkb,SAASza,SAGdT,KAAKkb,SAASxa,GAAG,aAAa,WAC5B8B,EAAQqG,KAAK,aACb,EAAKvG,oBAOPtC,KAAKkb,SAASS,gBAAkB,WAC9B,IAEIC,EAEA5Y,EAJEK,EAAUb,EAAQW,UAAU,GAC5BG,EAAQtD,KAAK6b,QAAQtY,SAASjD,EAAI8C,mBAAmBC,IAEvDkC,EAAU,GAKd,IAFAvF,KAAK6I,KAAK,WAEL7F,EAAI,EAAGA,EAAI,EAAGA,IACjB4Y,EAAetb,EAAI8C,mBAAmBZ,EAAQW,UAAUH,IACxDuC,EAAQvC,GAAK1C,EAAIqL,mBAAmBiQ,EAAahS,IAAItG,IAGvDd,EAAQ+I,WAAWhG,GACnB/C,EAAQqG,KAAK,QAEb7I,KAAK6I,KAAK,SAGZ7I,KAAKkb,SAASxa,GAAG,WAAW,WAC1B8B,EAAQqG,KAAK,eAIjByQ,iBAxTyC,WAyTnCtZ,KAAKkb,WACPlb,KAAKkb,SAASpa,iBACPd,KAAKkb,WAIhBY,UA/TyC,WAgUvC9b,KAAK+b,QAAQ,SAGfC,WAnUyC,WAoUvChc,KAAK+b,QAAQ,UAGfE,aAvUyC,WAwUvCjc,KAAK+b,QAAQ,YAGfG,YA3UyC,WA4UvClc,KAAK+b,QAAQ,WAGfI,gBA/UyC,WAgVvCnc,KAAK+b,QAAQ,eAGfK,gBAnVyC,WAoVnCpc,KAAKmb,OAAO,QAAWnb,KAAKmU,UACzBnU,KAAKsU,SAGd+H,eAxVyC,WAyVvC,IACI/D,EADElK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEkd,iBAEpBtc,KAAK2Y,cAAgB3Y,KAAK2Y,aAC1BL,EAAUtY,KAAK2Y,aAAe3Y,KAAKR,QAAQ8Y,QAAU,EAErDlZ,EAAE6C,QAAQgZ,WAAW7M,EAAOkK,GAC5BlK,EAAM8C,aAAa,UAAWoH,GAE9BtY,KAAKuc,aAGPC,cAvWyC,WAwWvC,IACIjE,EADEnK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEqd,gBAEpBzc,KAAK4Y,WAAa5Y,KAAK4Y,UACvBL,EAAUvY,KAAK4Y,UAAY5Y,KAAKR,QAAQ+Y,QAAU,OAElDnK,EAAMjC,MAAMoM,QAAUA,EAEtBvY,KAAKuc,aAIPG,aAtXyC,WAuXnC1c,KAAK0Y,cAAiB1Y,KAAK2c,WACxB3c,KAAK4c,cAGdC,eA3XyC,WA4XvC,IAAI/B,EAAK9a,KAAKyY,SACRxQ,EAAKjI,KAAKiZ,aAEZjZ,KAAKmb,OAAO,SAAYnb,KAAKiU,QAAQ7U,EAAEyV,eAE5BzV,EAAE6C,QAAQ6a,kBAGzB9c,KAAKsC,iBAED2F,EAAMA,EAAGgN,YAAY6F,GAClBA,EAAGva,KAAK0U,YAAY6F,KAI7BiC,WA3YyC,WA4YvC,IAAIva,EAAUxC,KAAKyY,SACfnY,EAAMkC,EAAQjC,KACdoE,EAAMnC,EAAQjB,aAElB,GAAKvB,KAAKiU,QAAQ7U,EAAE8W,cAApB,CAGA,IAAI8G,EAAe,IAAIC,MAEvBD,EAAanX,GAAKmX,EAAanX,IAAM,cACrCmM,SAASqG,KAAK5Q,YAAYuV,GAE1BA,EAAaE,OAAS,WACpB,IAAIlX,EAASgX,EAAahX,OACtBD,EAAQiX,EAAajX,MACrBoX,EAAK7c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cia,EAAK9c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cka,EAAK/c,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cma,EAAKhd,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAsBlD6Z,EAAaE,OAAS,WACpB9d,EAAE6C,QAAQ8O,OAAOiM,IAGf5D,QAAUA,OAAOmE,eAAe,cAClCC,UACIR,EAAanX,GACb,CAAC,EAAG,EAAGE,EAAO,EAAGA,EAAOC,EAAQ,EAAGA,GACnC,CAACmX,EAAGlZ,EAAGkZ,EAAGjZ,EAAGkZ,EAAGnZ,EAAGmZ,EAAGlZ,EAAGoZ,EAAGrZ,EAAGqZ,EAAGpZ,EAAGmZ,EAAGpZ,EAAGoZ,EAAGnZ,IAC9C,IAKR8Y,EAAa9X,IAAM1C,EAAQhD,QAAQie,mBAAqB9Y,EAAIO,MAG9DyX,SArcyC,WAsc/B3c,KAAK0Y,eAEF1Y,KAAKiU,QAAQ7U,EAAEse,eAE1B1d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASI,eACd7Y,KAAKuc,aAGPK,WA/cyC,YAgd/B5c,KAAK0Y,eAEH1Y,KAAKiU,QAAQ7U,EAAEse,eAEzB1d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASkF,cACd3d,KAAKuc,aAGPpI,QAzdyC,WA0dvC,IAAI2G,EAAK9a,KAAKyY,SACVnY,EAAMwa,EAAGva,KACP0H,EAAKjI,KAAKiZ,YAEXjZ,KAAKmb,OAAO,YACZlT,GAAOA,EAAG1F,YAAYuY,KAAS7S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eACvB,SAApBF,EAAGtb,QAAQmE,MAAoB3D,KAAK4d,QAAQ9C,EAAGtb,QAAQmE,MAIzD3D,KAAK4D,MAAQkX,EAAGtb,QAAQmE,MAHxB3D,KAAK4D,MAAQ,GACb5D,KAAKgb,cAAgB,IAIvBhb,KAAK+a,gBACL/a,KAAKob,kBACLpb,KAAKuc,aAGPjI,MA/eyC,WAgfvC,IAAMwG,EAAK9a,KAAKyY,SACVnY,EAAMwa,EAAGva,KACT0H,EAAKjI,KAAKiZ,YAEZjZ,KAAKmb,OAAO,YACXlT,GAAOA,EAAG1F,YAAYuY,KAAS7S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eAC/Chb,KAAK4D,MAAQ,OACb5D,KAAK+a,gBACL/a,KAAKsZ,mBACLtZ,KAAKuc,aAGPsB,UAhgByC,WAigBvC7d,KAAKyY,SAASrW,YAGhBiI,aApgByC,SAogB5BrJ,GACX,IAAMiH,EAAKjI,KAAKiZ,YAEXjZ,KAAKgb,iBAELhb,KAAKmb,OAAO,SAAYlT,GAAMA,EAAG9F,gBAEtCnC,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASza,SACvCrB,EAAE6C,QAAQ4N,SAASwJ,EAAO9X,aAAc,4BAI5C4I,aAlhByC,WAmhBvC,IAAM2Q,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAGXjZ,KAAKuZ,UAAYvZ,KAAK+Y,eAEtB/Y,KAAKgb,gBACNhb,KAAKmb,OAAO,SAAYlT,GAAMA,EAAG1F,YAAYuY,IAEjD9a,KAAKgb,cAAcnZ,WAAU,SAACwX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASpa,UACvC1B,EAAE6C,QAAQ8R,YAAYsF,EAAO9X,aAAc,4BAI/CwZ,cAniByC,WAoiBvC,IACIza,EADON,KAAKyY,SACHlY,KACPoD,EAAO3D,KAAK8d,UAEd9d,KAAKgb,eAAiB1a,EAAI2U,YAAYjV,KAAKgb,eAC/Chb,KAAKgb,cAAyB,KAATrX,EAAc,GAAK3D,KAAKuZ,SAAS5V,GAC3B,KAAvB3D,KAAKgb,eACP1a,EAAIuZ,SAAS7Z,KAAKgb,gBAItB3Y,YA/iByC,WAgjBvC,IAAIyY,EAAK9a,KAAKyY,SACRxQ,EAAKjI,KAAKiZ,YACZ3Y,EAAMwa,EAAGva,KAEPgF,EAAUuV,EAAGxV,aACfyY,GAAS,IAEb,GAAI9V,GAAMA,EAAG9F,eACX8F,EAAGzH,QAAQ6B,mBAIb,IAAIyY,EAAGtb,QAAQgW,kBAAmBxV,KAAKyK,QAAvC,CAEA,IAAK,IAAIzH,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAMuY,IACnBA,EAASxY,EAAQvC,GAAGwC,KAKxB,IAAIwY,EAAclD,EAAGvR,YACrByU,EAAYxY,IAAMuY,EAElB/d,KAAKyK,QAAUrL,EAAE0Q,iBAAiBmO,SAASD,EAAa,CACtD/K,QAASjT,KAAKgT,cACbpB,MAAMtR,EAAKwa,GACdA,EAAGjS,KAAK,qBAGV0T,SA9kByC,WA+kBnCvc,KAAKyK,SAAWzK,KAAKsC,iBACzBtC,KAAKqC,eAGPuI,kBAnlByC,WAolBvC,IAAMpI,EAAUxC,KAAKyY,SAEflT,EAAU/C,EAAQ8C,aACpBmF,EAAUzK,KAAKyK,QACfsT,GAAS,IAEb,GAAItT,GAAWA,aAAmBrL,EAAEsL,iBAAiBC,SAAU,CAC7D,IAAK,IAAI3H,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAMuY,IACnBA,EAASxY,EAAQvC,GAAGwC,KAKxB,IAAIwY,EAAcxb,EAAQ+G,YAC1ByU,EAAYxY,IAAMuY,EAEbvb,EAAQhD,QAAQgW,iBACnBxV,KAAKyK,QAAQyT,UAAUF,KAK7BJ,QA3mByC,SA2mBjCja,GACN,QAAS3D,KAAKwZ,OAAO7V,IAGvBma,QA/mByC,WAgnBvC,GAAK9d,KAAKgC,UACV,OAAOhC,KAAK4D,OAGd6X,SApnByC,WAqnBvC,OAAOzb,KAAKwZ,QAGd2B,OAxnByC,SAwnBlCxX,GACL,QAAK3D,KAAKgC,WACHhC,KAAK4D,QAAUD,GAGxBoY,QA7nByC,SA6nBjCoC,GACN,IAAMrD,EAAK9a,KAAKyY,SACVxQ,EAAKjI,KAAKiZ,YAGhB,GAFWjZ,KAAK8d,YAEHK,GAAYne,KAAK4d,QAAQO,IAAane,KAAKgC,UAaxD,OATIhC,KAAKyK,SAAWzK,KAAKyK,QAAQ2T,UAAUD,GACvCne,KAAKmb,OAAO,UAAYnb,KAAKkb,UAAYlb,KAAKob,kBAClDpb,KAAK4D,MAAQua,EACTne,KAAKmb,OAAO,SAAWnb,KAAKsZ,mBAChCtZ,KAAK+a,gBACL/a,KAAKuc,WAEDtU,GAAMA,EAAG1F,YAAYuY,IAAOA,EAAG1Y,WAE5BpC,MAOTmZ,SAtpByC,SAspBhCnY,GACP,IAAI2C,EAAO3D,KAAK8d,UACV7V,EAAKjI,KAAKiZ,YACZoF,EAAanW,OAAOC,KAAKnI,KAAKyb,YAC9BzF,EAAMqI,EAAW3E,QAAQ/V,GAEzBwa,EAAUE,GADCrI,EAAM,GAAKqI,EAAWxZ,QAGrC,GAAI7D,EAAG,CACL,GAAIiH,GAAMA,EAAG9F,eAAkB,OAC/B/C,EAAE8B,SAASod,KAAKtd,GAGlB,OAAOhB,KAAK+b,QAAQoC,MAIxB/e,EAAE0Q,iBAAiBhO,KAAO,SAACU,EAAShD,GAClC,OAAO,IAAIJ,EAAEsL,iBAAiB+H,KAAKjQ,EAAShD,K,eC3qB9CJ,EAAEqd,aAAerd,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK8W,WACP4F,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAYiQ,eAEtCF,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAYkQ,YAGxCnf,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAI5CvE,EAAEsL,iBAAiB8N,WAAWuG,EAAa,SAATpb,EAAkB,GAAK,gBAEzDvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BmC,WA8BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,eAAgB,gBACnD7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpDnd,EAAK0a,oB,eClCTpd,EAAEyV,aAAezV,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIif,EAFE3c,EAAOU,EAAQhC,QAOjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCgM,EAAUjc,EAAQhD,QAAQiP,YAAYyQ,YAEtC9f,EAAEsL,iBAAiB8N,WAAW2G,UACb,SAAfrd,EAAK8B,MAAmB,GAAK,mBAG/B6a,EAAUjc,EAAQhD,QAAQiP,YAAY2Q,aACtChgB,EAAEsL,iBAAiBiI,iBAAiBwM,UACnB,SAAfrd,EAAK8B,MAAmB,GAAK,iBAIjCpE,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAtBU,iBAuBVL,QAASA,EACT5M,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAjCmC,WAkCjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAK+a,iBAC7C/a,EAAK8S,mB,eCrChBxV,EAAEigB,cAAgBjgB,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAY6Q,aACrCzN,UAAW,WAGbzS,EAAEsL,iBAAiB8N,WAAW+G,EAAI,eAClCngB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdoC,WAevBlQ,KAAKyY,SAASjY,QACpByb,mB,eChBT7c,EAAEogB,WAAapgB,EAAEmf,WAAWhf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,OACNL,QAASjc,EAAQhD,QAAQiP,YAAYgR,UACrC5N,UAAW,QAGbzS,EAAEsL,iBAAiB8N,WAAWkH,EAAI,YAClCtgB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdiC,WAelBlQ,KAAKyY,SAASjY,QACtBsb,gB,eChBT1c,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEmf,WAAanf,EAAEugB,SAASC,OAAOrgB,OAAO,CACtCC,QAAS,CACPof,YAAa,CACXC,KAAK,EACLC,KAAM,GACNjN,UAAW,GACX4M,QAAS,KAIb3e,WAVsC,SAU3BQ,EAAKkC,EAAShD,GACvBQ,KAAKyY,SAAWjW,EAChBxC,KAAKO,KAAOD,EAEZlB,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEugB,SAASC,OAAO3f,UAAUH,WAAWI,KAAKF,KAAMR,GAElDQ,KAAK+R,kBAGP8N,YApBsC,SAoB1BpV,EAASuG,EAAW8O,GAAM,WAC9BC,EAAc/f,KAAKR,QAAQof,YAC3B/M,EAAYkO,EAAYlO,UACxB/P,EAAO9B,KAAKyY,SAASjY,QAE3BR,KAAKyK,QAAUA,EACfzK,KAAKggB,MAAQ5gB,EAAE6C,QAAQgP,OAAO,KAAM,GAAID,GACxChR,KAAKif,MAAQ7f,EAAE6C,QAAQgP,OAAO,IAAK,GAAIjR,KAAKggB,OAExCD,EAAYlB,IACd7e,KAAKif,MAAM5N,UAAYjS,EAAEkS,SAASL,OAAO8O,EAAYjB,MAErD9e,KAAKif,MAAM5N,UAAY0O,EAAYjB,KAGrC9e,KAAKif,MAAM/N,aAAa,OAAQ,KAChClR,KAAKif,MAAM/N,aAAa,QAAS6O,EAAYtB,SACzCsB,EAAY5T,OAASnM,KAAKif,MAAM/N,aAAa,QAAS6O,EAAY5T,OACtEnM,KAAKif,MAAM/N,aAAa,OAAQ,UAEhC9R,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAOjf,KAAKigB,YAAYpK,WAE5ChE,IACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAOpN,GACb,aAAdA,GACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKggB,MAAOnO,GAE7BA,IAAc/P,EAAK8B,MACrBxE,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAO,iBAE/B7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAO,kBAItC7f,EAAE8B,SAASR,GAAGV,KAAKif,MAAO,QAASjf,KAAKS,OAAQT,MAChDZ,EAAE8B,SAASR,GAAGV,KAAKyY,SAAU,UAAU,WACrC,IAAM7B,EAAQ,EAAKqI,MAAM5N,UAAUuF,MAAM,yBACrCA,GAA0B,IAAjBA,EAAM/R,QAAgB,EAAKqb,mBAI1ClgB,KAAKmgB,eAAe1V,EAASzK,KAAKggB,MAAOF,IAG3C/N,eAhEsC,WAiEpC,IAAIC,SAASC,cAAc,YAA3B,CAIA,IAAIC,EAAKF,SAASoO,cAAc,OAChClO,EAAGrM,GAAK,UACRqM,EAAGhB,aAAa,SAAU,UAC1BgB,EAAGb,WAAY,IAAIjS,EAAEihB,gBAAiBhO,SAEtCL,SAASC,cAAc,wBAAwBxK,YAAYyK,KAG7DgO,cA7EsC,WA8EpC9gB,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAMqB,cAAe,YAChDlhB,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAO,aAGpCsB,eAlFsC,WAmFpCnhB,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAMqB,cAAe,YAC7ClhB,EAAE6C,QAAQ4N,SAAS7P,KAAKif,MAAO,eAInC7f,EAAEohB,WAAa,SAASlgB,EAAKkC,EAAShD,GACpC,OAAO,IAAIJ,EAAEmf,WAAWje,EAAKkC,EAAShD,K,eC9FxCJ,EAAE8W,aAAe9W,EAAEmf,WAAWhf,OAAO,CAEnCO,WAFmC,SAExBQ,EAAKkC,EAAShD,GACvB,IACIif,EADE3c,EAAOU,EAAQhC,QAGrBR,KAAKygB,aAAc,EACnBzgB,KAAK0gB,gBAAiB,EACtB1gB,KAAK2gB,iBAAkB,EAEnB7e,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAWxX,EAAI,aAClCyd,EAAUjc,EAAQhD,QAAQiP,YAAYmS,cAEtCxhB,EAAEsL,iBAAiBiI,iBAAiB3R,EAAI,cACxCyd,EAAUjc,EAAQhD,QAAQiP,YAAYoS,eAGxCrhB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASA,GAGXrf,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BmC,WA6BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3B,GAAIsB,aAAgB1C,EAAEsL,iBAAiB+H,KACrC3Q,EAAKib,kBAKP,IAAI/c,KAAK2gB,gBAAT,CAGE3gB,KAAK2gB,iBAAkB,EAGzB,IAAMG,EAAa9gB,KAAKif,MAAMqB,cAE9BtgB,KAAK+gB,kBAAoB/gB,KAAKghB,iBAAiBpe,KAAK5C,MACpDA,KAAKihB,kBAAoBjhB,KAAKkhB,iBAAiBte,KAAK5C,MAEpDZ,EAAE8B,SAASR,GAAGogB,EAAY,SAAS,WACjC,GAAK9gB,KAAKygB,YAWH,CAEL,GAAIzgB,KAAK0gB,eACP,OAGF1gB,KAAKmhB,aACLnhB,KAAKohB,0BAA0BN,GAC/Bhf,EAAKoT,oBAlBLlV,KAAKygB,aAAc,EACnBzgB,KAAKqhB,mBAELC,WAAWthB,KAAKuhB,0BAA0B3e,KAAK5C,KAAM8gB,GAAa,KAClEhf,EAAKoR,cAAcwE,KACf,WACE1X,KAAKmhB,aACLnhB,KAAKohB,0BAA0BN,IAC/Ble,KAAK5C,SAYZA,QAGLmhB,WAzEmC,WA0EjCnhB,KAAKwhB,qBACLxhB,KAAKygB,aAAc,EACnBzgB,KAAK0gB,gBAAiB,GAGxBa,0BA/EmC,SA+ETE,GACxBA,EAAQC,iBAAiB,aAAc1hB,KAAK+gB,mBAC5CU,EAAQC,iBAAiB,aAAc1hB,KAAKihB,oBAG9CG,0BApFmC,SAoFTK,GACxBA,EAAQE,oBAAoB,aAAc3hB,KAAK+gB,mBAC/CU,EAAQE,oBAAoB,aAAc3hB,KAAKihB,oBAGjDD,iBAzFmC,WA0FjChhB,KAAK4hB,oBAGPV,iBA7FmC,WA8F5BlhB,KAAK0gB,eAGR1gB,KAAK0gB,gBAAiB,EAFtB1gB,KAAKqhB,oBAMTG,mBArGmC,WAsGjCpiB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,UAAW,WAC9C7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAM4C,WAAY,WAG/CR,iBA3GmC,WA4GjCjiB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,WACnC7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAEkS,SAASwQ,cAAc9hB,KAAKif,MAAO,WAGvC2C,iBAjHmC,WAkHjCxiB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,UACnC7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,gBAAiB,cACpD7f,EAAE6C,QAAQ8R,YAAY/T,KAAKif,MAAM4C,WAAY,c,cCpHjDziB,EAAE2iB,iBAAmB3iB,EAAEmf,WAAWhf,OAAO,CACvCO,WADuC,SAC5BQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,cACNL,QAASjc,EAAQhD,QAAQiP,YAAYuT,gBACrCnQ,UAAW,cAGbzS,EAAEsL,iBAAiB8N,WAAWyJ,EAAI,kBAClC7iB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAduC,WAe1BlQ,KAAKyY,SAASjY,QACpB2b,sB,eChBT/c,EAAE8iB,gBAAkB9iB,EAAEmf,WAAWhf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IAAMsC,EAAOU,EAAQhC,SAErBhB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAY0T,eACrCtQ,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAfsC,WAgBpC,IAAI9B,EAAQpO,KAAKyY,SAASlX,aAE1B6gB,KAAKC,QAAQjU,EAAOhP,EAAEgjB,KAAKhU,Q,eClB/BhP,EAAEiV,WAAajV,EAAEmf,WAAWhf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,GACvB,IACIgf,EACAC,EAFE3c,EAAOU,EAAQhC,QAIjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAW8J,EAAI,UAClCljB,EAAEsL,iBAAiB8N,WAAW+J,EAAI,QAClC9D,EAAUjc,EAAQhD,QAAQiP,YAAY+T,SAEtChE,EAAM1c,EAAKqZ,OAAO,QAAU,OAAS,WAErC/b,EAAEsL,iBAAiBiI,iBAAiB4P,EAAI,aACxC9D,EAAUjc,EAAQhD,QAAQiP,YAAYgU,WACtCjE,EAAM,SAGRhf,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAW,QAGbzS,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BiC,WA8B/B,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAKsa,kBAC7Cta,EAAKsS,iB,eCjChBhV,EAAEsjB,gBAAkBtjB,EAAEmf,WAAWhf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK6W,cACP6F,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAYkU,kBAEtCnE,EAAM,YACNC,EAAUjc,EAAQhD,QAAQiP,YAAYmU,uBAGxCpjB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAG5C3D,KAAK6iB,WAAarjB,EAAQsjB,WAAa,IAAI1jB,EAAEugB,SAAS,CACpD1M,QAAS,CAAC8P,EAAiBC,EAAgBC,EAAgBC,EAAgBC,EAAgBC,EAAeC,KAK5GjkB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAhCsC,WAiCpC8G,QAAQC,IAAIjX,KAAK6iB,YACjB7L,QAAQC,IAAIjX,KAAK6iB,WAAW7gB,WAC3BhC,KAAK6iB,WAAW7gB,UAAahC,KAAK6iB,WAAW/hB,UAAYd,KAAK6iB,WAAW7gB,UACzEhC,KAAK6iB,WAAW7gB,UAAahC,KAAK6iB,WAAWS,OAAStjB,KAAK6iB,WAAWU,UAW3E,IAAMH,EAAgBhkB,EAAEmf,WAAWhf,OAAO,CACxCC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,aACT5M,UAAW,gCACX1F,MAAO,yCAGX+D,SAAU,eAMNiT,EAAiB/jB,EAAEmf,WAAWhf,OAAO,CACzCC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,cACT5M,UAAW,gCACX1F,MAAO,wCAGX+D,SAAU,eAMNgT,EAAiB9jB,EAAEmf,WAAWhf,OAAO,CACzCC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,cACT5M,UAAW,gCACX1F,MAAO,wCAGX+D,SAAU,eAMN+S,EAAiB7jB,EAAEmf,WAAWhf,OAAO,CACzCC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,cACT5M,UAAW,gCACX1F,MAAO,wCAGX+D,SAAU,eAMN8S,EAAiB5jB,EAAEmf,WAAWhf,OAAO,CACzCC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,cACT5M,UAAW,gCACX1F,MAAO,wCAGX+D,SAAU,eAMN6S,EAAkB3jB,EAAEmf,WAAWhf,OAAO,CAC1CC,QAAS,CACPof,YAAa,CACXE,KAAM,GACNL,QAAS,eACT5M,UAAW,gCACX1F,MAAO,sCAGX+D,SAAU,eAMNmT,EAASjkB,EAAEmf,WAAWhf,OAAO,CACjCC,QAAS,CACPof,YAAa,CACXE,KAAM,WACNL,QAAS,SACT5M,UAAW,gCACX1F,MAAO,uBAIX+D,SAViC,WAW/BlQ,KAAKc,UACLd,KAAKyK,QAAQ+Y,Y,eCrJjBpkB,EAAEkd,cAAgBld,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAEIgf,EACAC,EAHE3c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK6W,cACP6F,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAYkU,kBAEtCnE,EAAM,UACNC,EAAUjc,EAAQhD,QAAQiP,YAAYmU,uBAGxCpjB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAAoB,SAATlO,EAAkB,WAAa,IAG5CvE,EAAEsL,iBAAiB8N,WAAWiL,EAAa,SAAT9f,EAAkB,GAAK,iBAEzDvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BoC,WA6BlC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QACrBkjB,EAAO1jB,KAAKif,MAElB7f,EAAEkS,SAAS0N,YAAY0E,EAAM,UAAW,iBACxCtkB,EAAEkS,SAASQ,YAAY4R,EAAM,yBAA0B,qBACvD5hB,EAAKua,qB,eClCTjd,EAAEukB,cAAgBvkB,EAAEmf,WAAWhf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAAImE,EAAOvE,EAAEe,MAAMgT,aAAa3Q,EAAS,UAAW,SAChDqI,EAASrI,EAAQqI,QAErBrL,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASjc,EAAQhD,QAAQiP,YAAYmV,aACrC/R,UAAWhH,GAAmB,SAATlH,EAAkB,GAAK,YAG9CvE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAhBoC,WAiBlC,IAAM4K,EAAK9a,KAAKyY,SAEhBrZ,EAAE8B,SAASR,GAAGoa,EAAI,CAChBhZ,KAAM9B,KAAKkgB,cACXpS,QAAS9N,KAAKugB,gBACbvgB,MAEH8a,EAAGhN,c,eCxBP1O,EAAEykB,aAAezkB,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASjc,EAAQhD,QAAQiP,YAAYqV,YACrCjS,UAAW,UAGbzS,EAAEsL,iBAAiB8N,WAAWuL,EAAI,cAClC3kB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdmC,WAepBlQ,KAAKyY,SAASjY,QACtB0b,kB,eChBT9c,EAAE4kB,YAAc5kB,EAAEmf,WAAWhf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,QACNL,QAASjc,EAAQhD,QAAQiP,YAAYwV,WACrCpS,UAAW,SAGbzS,EAAEsL,iBAAiB8N,WAAW0L,EAAI,aAClC9kB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdkC,WAenBlQ,KAAKyY,SAASjY,QACtBwb,iB,eChBT5c,EAAEse,YAActe,EAAEmf,WAAWhf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,GACvB,IACIgf,EACAC,EAFE3c,EAAOU,EAAQhC,QAIjBsB,EAAK4W,eACP8F,EAAM,eACNC,EAAUjc,EAAQhD,QAAQiP,YAAY0V,eAEtC3F,EAAM,gBACNC,EAAUjc,EAAQhD,QAAQiP,YAAY2V,cAGxC5kB,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT5M,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEsL,iBAAiB8N,WAAWlL,EAAmB,SAAfxL,EAAK8B,MAAmB,GAAK,WAC/DxE,EAAEsL,iBAAiB8N,WAAW6L,EAAmB,SAAfviB,EAAK8B,MAAmB,GAAK,aAE/DxE,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BkC,WA6BhC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS0N,YAAYhf,KAAKif,MAAO,gBAAiB,gBACpD7f,EAAEkS,SAASQ,YAAY9R,KAAKif,MAAO,iBAAkB,iBACrDnd,EAAK4a,mB,eCjCTtd,EAAE8U,aAAe9U,EAAEmf,WAAWhf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbof,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASjc,EAAQhD,QAAQiP,YAAY6V,cAGvCllB,EAAEsL,iBAAiBiI,iBAAiB2P,EAAI,eACxCljB,EAAEmf,WAAWte,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAbmC,WActBlQ,KAAKyY,SAASjY,QACpBwT,mB,eCdT5U,EAAEgjB,KAAO,SAAqBzd,GAC5B,GAAiD,IAA7CuD,OAAOC,KAAKia,KAAKmC,WAAW5f,IAAME,OAAc,CAClDmS,QAAQC,IAAImL,KAAKmC,WAAW5f,IAC5B,IAAM6f,EAAMpC,KAAKmC,WAAW5f,QAKC,IAApB6f,EAAIC,kBACiB,IAArBD,EAAIE,eAKTF,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAEhBD,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GAEfF,EAAIG,eAGJH,EAAII,iBAUqB,MAA3BJ,EAAIK,oBAK8B,MAA3BL,EAAIK,oBAHVxZ,KAAKyB,GACL0X,EAAIM,gBAAgBC,UAAYP,EAAIM,gBAAgBE,aAOvDhO,QAAQC,IAAI,yBAGdD,QAAQC,IAAI,eAAgBuN,EAAIS,cAGR,IAApBT,EAAIS,aAGuB,IAApBT,EAAIS,aAGgB,IAApBT,EAAIS,cAJH5Z,KAAKyB,QAWY,IAApB0X,EAAIU,kBACmB,IAAvBV,EAAIW,qBAKkB,IAApBX,EAAIU,kBACmB,IAAvBV,EAAIW,iBAGTX,EAAIU,YAAYH,UAAYP,EAAIU,YAAYF,YAC5CR,EAAIW,qBAMVpO,MAAM,4D,cClFV3X,EAAEgmB,cAAgBhmB,EAAEimB,WAAW9lB,OAAO,CACpCC,QAAS,CACP8lB,KAAM,UACNC,KAAMnmB,EAAEmmB,KAAK,CACXC,QAEE,iVACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZoC,WAapB3lB,KAAK4lB,SAEXtb,UAAUtK,KAAK6lB,QAAS7lB,KAAK8lB,cAGvCC,aAlBoC,WAmBlC/lB,KAAKke,UAAUle,KAAK4lB,SAASziB,UAAUnD,KAAK6lB,aAIhDzmB,EAAE8a,cAAgB,SAAS1X,EAASwT,EAAKxW,GACvC,OAAO,IAAIJ,EAAEgmB,cAAc5iB,EAASwT,EAAKxW,K,eCxB3CJ,EAAE4mB,WAAa5mB,EAAEimB,WAAW9lB,OAAO,CACjCC,QAAS,CACP8lB,KAAM,OACNC,KAAMnmB,EAAEmmB,KAAK,CAEXC,QAAS,ykCACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAXiC,WAY/B,IAAInjB,EAAUxC,KAAK4lB,SACbK,EAAezjB,EAAQW,UAAUnD,KAAK6lB,SACtCK,EAAYlmB,KAAK8lB,YAEvBtjB,EAAQkL,OAAOuY,EAAcC,IAG/BH,aAnBiC,WAoB/B/lB,KAAKke,UAAUle,KAAK4lB,SAASziB,UAAUnD,KAAK6lB,aAIhDzmB,EAAE0a,WAAa,SAAStX,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAE4mB,WAAWxjB,EAASwT,EAAKxW,K,eCzBxCJ,EAAEimB,WAAajmB,EAAE+mB,OAAO5mB,OAAO,CAC7BO,WAD6B,SAClB0C,EAAS+H,EAAQ/K,GAC1B,IAAMgL,EAAShI,EAAQW,UAAUoH,GAEjCnL,EAAEW,WAAWC,KAAMR,GAEnBQ,KAAK4lB,SAAWpjB,EAChBxC,KAAK6lB,QAAUtb,EAEf,IAAM6b,EAAgB,CACpB3L,WAAW,EACX4L,aAAc,IAGZ7mB,GAAWA,EAAQ+d,eAAe,eACpC6I,EAAc3L,UAAYjb,EAAQib,WAGpCrb,EAAE+mB,OAAOlmB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQ4b,IAGnD/lB,MArB6B,SAqBvBC,GACJlB,EAAE+mB,OAAOlmB,UAAUI,MAAMH,KAAKF,KAAMM,GACpCN,KAAKsmB,iBACLtmB,KAAK+lB,gBAGPllB,SA3B6B,SA2BpBP,GACPN,KAAKumB,mBACLnnB,EAAE+mB,OAAOlmB,UAAUY,SAASX,KAAKF,KAAMM,IAGzCkmB,mBAhC6B,WAiC3BxmB,KAAK4lB,SAAS/c,KAAK,cAGrB4d,iBApC6B,WAqC3BzmB,KAAK0mB,aAGPA,UAxC6B,WAyC3B1mB,KAAK4lB,SAAS/a,QAAS,EACvB7K,KAAK4lB,SAAS/c,KAAK,SAGrByd,eA7C6B,WA8C3BtmB,KAAKU,GAAG,CACNgB,YAAatC,EAAE8B,SAASod,KACxBnd,UAAWnB,KAAKwmB,mBAChBnlB,KAAMrB,KAAK2lB,cACXgB,QAAS3mB,KAAKymB,kBACbzmB,MAEHA,KAAK4lB,SAASrlB,KAAKG,GAAG,UAAWV,KAAK+lB,aAAc/lB,MACpDA,KAAK4lB,SAASllB,GAAG,SAAUV,KAAK+lB,aAAc/lB,OAGhDumB,iBAzD6B,WA0D3BvmB,KAAKe,IAAI,CACPW,YAAatC,EAAE8B,SAASod,KACxBnd,UAAWnB,KAAKwmB,mBAChBnlB,KAAMrB,KAAK2lB,cACXgB,QAAS3mB,KAAKymB,kBACbzmB,MAEHA,KAAK4lB,SAASrlB,KAAKQ,IAAI,UAAWf,KAAK+lB,aAAc/lB,MACrDA,KAAK4lB,SAAS7kB,IAAI,SAAUf,KAAK+lB,aAAc/lB,OAIjD4mB,wBAtE6B,SAsELC,EAASC,GAC/B,IAAMtkB,EAAUxC,KAAK4lB,SACftlB,EAAMkC,EAAQjC,KAEdwmB,EAAczmB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmByjB,GACrCjZ,EAAWtN,EAAI8C,mBAAmB0jB,GAClCE,EAAsBhnB,KAAKinB,IAAIF,EAAapZ,GAC5CuZ,EAAmBlnB,KAAKinB,IAAIF,EAAanZ,GAE/C,OAAOvC,KAAK8b,KAAKD,EAAmBF,IAItCC,IApF6B,SAoFzB5C,EAAGtF,GACL,IAAMqI,EAAK/C,EAAEpgB,EAAI8a,EAAE9a,EACbojB,EAAKhD,EAAEngB,EAAI6a,EAAE7a,EAEnB,OAAOmH,KAAKC,IAAI8b,EAAI,GAAK/b,KAAKC,IAAI+b,EAAI,IAIxCC,oBA5F6B,SA4FTT,EAASC,GAC3B,IAAMtkB,EAAUxC,KAAK4lB,SACftlB,EAAMkC,EAAQjC,KAGdwmB,EAAczmB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmByjB,GACrCjZ,EAAWtN,EAAI8C,mBAAmB0jB,GAElCS,EACJlc,KAAKmc,MAAMT,EAAY7iB,EAAIyJ,EAAYzJ,EAAG6iB,EAAY9iB,EAAI0J,EAAY1J,GAMxE,OAHEoH,KAAKmc,MAAMT,EAAY7iB,EAAI0J,EAAS1J,EAAG6iB,EAAY9iB,EAAI2J,EAAS3J,GAGhDsjB,M,eC5GtBnoB,EAAEqoB,iBAAmBroB,EAAEimB,WAAW9lB,OAAO,CACvCC,QAAS,CACP8lB,KAAM,aACNC,KAAMnmB,EAAEmmB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZuC,WAarC,IAAMnjB,EAAUxC,KAAK4lB,SACftlB,EAAMkC,EAAQjC,KACd0lB,EAAezjB,EAAQW,UAAUnD,KAAK6lB,SACtCK,EAAYlmB,KAAK8lB,YACjBnZ,EAAQ3M,KAAKsnB,oBAAoBrB,EAAcC,GAC/Cra,EAAQ7L,KAAK4mB,wBAAwBX,EAAcC,GAE3C,IAAVvZ,GAAenK,EAAQ6K,SAASV,EAAO,OAE3C,IAAIhG,EAAenE,EAAQmE,aACtBA,IAAgBA,EAAe,IAEpC,IAAM+gB,EAAUpnB,EAAIqnB,uBAAuBnlB,EAAQW,UAAU,IACvDykB,EAAUtnB,EAAIqnB,uBAAuBnlB,EAAQW,UAAU,IACvD+L,EAAI7D,KAAKwc,IAAIH,EAAQzjB,EAAI2jB,EAAQ3jB,GACjCmL,EAAI/D,KAAKwc,IAAIH,EAAQxjB,EAAI0jB,EAAQ1jB,GACtBmH,KAAK8b,KAAKjY,EAAIA,EAAIE,EAAIA,GACxBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAEhBrJ,EAAQoJ,QAAQ,IAIpBma,aArCuC,WAsCrC/lB,KAAKke,UAAUle,KAAK4lB,SAASziB,UAAUnD,KAAK6lB,aAIhDzmB,EAAEkb,iBAAmB,SAAC9X,EAASwT,EAAKxW,GAClC,OAAO,IAAIJ,EAAEqoB,iBAAiBjlB,EAASwT,EAAKxW,K,eC3C9CJ,EAAE0oB,WAAa1oB,EAAEimB,WAAW9lB,OAAO,CACjCC,QAAS,CACP8lB,KAAM,OACNyC,aAAa,EACbxC,KAAMnmB,EAAEmmB,KAAK,CAEXC,QAAS,ycACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrB7kB,SAZiC,SAYxBP,GACPN,KAAKgoB,gBACL5oB,EAAEimB,WAAWplB,UAAUY,SAASX,KAAKF,KAAMM,IAG7CgmB,eAjBiC,WAkB/B,IAAMf,EAAOvlB,KAAKuB,aAElBnC,EAAEimB,WAAWplB,UAAUqmB,eAAepmB,KAAKF,MAE3CZ,EAAE8B,SAASR,GAAG6kB,EAAM,CAClB/jB,UAAWxB,KAAKioB,WAChBC,QAASloB,KAAKmoB,aACbnoB,MAEHZ,EAAE8B,SAASR,GAAGsR,SAAU,eAAgBhS,KAAKmoB,YAAanoB,OAG5DumB,iBA9BiC,WA+B/B,IAAMhB,EAAOvlB,KAAKuB,aAElBnC,EAAEimB,WAAWplB,UAAUqmB,eAAepmB,KAAKF,MAE3CZ,EAAE8B,SAASH,IAAIwkB,EAAM,CACnB/jB,UAAWxB,KAAKioB,WAChBC,QAASloB,KAAKmoB,aACbnoB,MAEHZ,EAAE8B,SAASH,IAAIiR,SAAU,eAAgBhS,KAAKmoB,YAAanoB,OAI7D2lB,cA5CiC,aA+CjCI,aA/CiC,WAgD/B/lB,KAAKke,UAAUle,KAAK4lB,SAASziB,UAAUnD,KAAK6lB,WAG9CoC,WAnDiC,SAmDtBjnB,GACT,IAAMiH,EAAKjI,KAAK4lB,SAAS3M,YACnBnX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAK4lB,SAASplB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAK4lB,SAAS1b,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAK4lB,WAA/D,CAIA,IAAMwC,EAAatmB,EAAKyY,aAExBva,KAAKqoB,OAAS/G,WAAWliB,EAAEwD,MAAK,WAC1B5C,KAAKsoB,UAAYC,aAAavoB,KAAKsoB,UAElCtoB,KAAKwoB,aAGRJ,EAAWvmB,WAAU,SAASwX,GACxBrZ,OAASqZ,GAAUA,EAAOoP,kBAHhCzoB,KAAK0oB,YAAY,UAAW,CAACC,WAAW,IAO1C3oB,KAAK4oB,gBACJ5oB,MAAO,OAGZmoB,YA7EiC,SA6ErBnnB,GACV,IAAMiH,EAAKjI,KAAK4lB,SAAS3M,YACnBnX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAK4lB,SAASplB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAK4lB,SAAS1b,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAK4lB,WAA/D,CAIA,IAAMwC,EAAatmB,EAAKyY,aAEpBvZ,EAAE6nB,gBAAkB7W,UACtBoW,EAAWvmB,WAAU,SAASwX,GAC5BA,EAAOoP,kBAIPzoB,KAAKqoB,QAAUE,aAAavoB,KAAKqoB,QAErCroB,KAAKsoB,SAAWhH,WAAWliB,EAAEwD,MAAK,WAChC5C,KAAKyoB,iBACJzoB,MAAO,SAIdZ,EAAEob,WAAa,SAAShY,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAE0oB,WAAWtlB,EAASwT,EAAKxW,K,eCvGxCJ,EAAE0pB,aAAe1pB,EAAEimB,WAAW9lB,OAAO,CACnCC,QAAS,CACP8lB,KAAM,SACNC,KAAMnmB,EAAEmmB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZmC,WAajC,IAAMnjB,EAAUxC,KAAK4lB,SACfK,EAAezjB,EAAQW,UAAUnD,KAAK6lB,SACtCK,EAAYlmB,KAAK8lB,YACjBnZ,EAAQ3M,KAAKsnB,oBAAoBrB,EAAcC,GAMrD1jB,EAAQ6K,SAASV,EAAO,QAG1BoZ,aAzBmC,WA0BjC/lB,KAAKke,UAAUle,KAAK4lB,SAASziB,UAAUnD,KAAK6lB,aAIhDzmB,EAAEgb,aAAe,SAAS5X,EAASwT,EAAKxW,GACtC,OAAO,IAAIJ,EAAE0pB,aAAatmB,EAASwT,EAAKxW,K,eC/B1CJ,EAAE2pB,YAAc3pB,EAAEimB,WAAW9lB,OAAO,CAClCC,QAAS,CACP8lB,KAAM,QACNC,KAAMnmB,EAAEmmB,KAAK,CACXC,QAEE,iiEACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZkC,WAahC,IAAInjB,EAAUxC,KAAK4lB,SACftlB,EAAMkC,EAAQjC,KACdoG,EAAenE,EAAQmE,aACvBsf,EAAezjB,EAAQW,UAAUnD,KAAK6lB,SACtCK,EAAYlmB,KAAK8lB,YACjBja,EAAQ7L,KAAK4mB,wBAAwBX,EAAcC,GAOlDvf,IAAgBA,EAAe,IACpC,IAAM+gB,EAAUpnB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDykB,EAAUtnB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACrD+L,EAAI7D,KAAKwc,IAAIH,EAAQzjB,EAAI2jB,EAAQ3jB,GACjCmL,EAAI/D,KAAKwc,IAAIH,EAAQxjB,EAAI0jB,EAAQ1jB,GACpBmH,KAAK8b,KAAKjY,EAAIA,EAAIE,EAAIA,GAExBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAMhBrJ,EAAQoJ,QAAQ,IAIpBma,aA3CkC,WA4ChC/lB,KAAKke,UAAUle,KAAK4lB,SAASziB,UAAUnD,KAAK6lB,aAIhDzmB,EAAE4a,YAAc,SAASxX,EAASwT,EAAKxW,GACrC,OAAO,IAAIJ,EAAE2pB,YAAYvmB,EAASwT,EAAKxW,K,eCjDzCJ,EAAE0Q,iBAAmB1Q,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBiI,iBAAmB,GAEtCvT,EAAEsL,iBAAiBse,WAAa5pB,EAAEugB,SAASsJ,QAAQ1pB,OAAO,IAE1DH,EAAE0Q,iBAAiB2F,WAAa,SAASjW,GACvC,OAAO,IAAIJ,EAAEsL,iBAAiBse,WAAWxpB,IAI3CJ,EAAEC,sBAAsBsQ,aAAY,WAElC3P,KAAKkpB,QAAU,CACb9pB,EAAE8W,aACF9W,EAAEyV,aACFzV,EAAEiV,WACFjV,EAAE8U,cAIJ9U,EAAEC,sBAAsBoT,KAAKgH,MAAQ,CACnCoB,KAAMzb,EAAEiV,WACR8U,OAAQ/pB,EAAE8U,cAGZ,IAAMmQ,EAAIrkB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAKkpB,QAE7DlpB,KAAKQ,QAAUpB,EAAEmH,sBAAsBzE,KAAK9B,KAAM,CAACiT,QAASoR,Q,cC7B9DjlB,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEsL,iBAAiBC,SAAWvL,EAAEugB,SAASyJ,MAAM7pB,OAAO,CACpDC,QAAS,CACP6pB,OAAQ,CAAC,GAAI,KAGfvpB,WALoD,SAKzC0K,EAAQhL,GACjBJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEugB,SAASyJ,MAAMnpB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQhL,IAG3D0Q,SAVoD,SAU3C5P,EAAKwa,GACZ9a,KAAKM,IAAMA,EACXN,KAAK8a,GAAKA,GAGZwO,MAfoD,WAgBlD,GAAItpB,KAAKupB,IACP,OAAOvpB,KAAKupB,IAAIC,UAIpBpL,UArBoD,SAqB1CqL,GAER,IADA,IAAMH,EAAQtpB,KAAKspB,QACVtmB,EAAI,EAAGA,EAAIsmB,EAAMzkB,OAAQ7B,IAAK,CACrC,IAAI0mB,EAAOJ,EAAMvT,KAAK/S,GAAGwmB,SAAS,GAClC,GAAIpqB,EAAE6C,QAAQQ,SAASinB,EAAMD,GAE3B,OADAC,EAAKC,QACED,EAGX,OAAO,KAIXtqB,EAAE0Q,iBAAiBmO,SAAW,SAASzT,EAAQhL,GAC7C,OAAO,IAAIJ,EAAEsL,iBAAiBC,SAASH,EAAQhL,IAGjDJ,EAAEoH,wBAAwBmJ,aAAY,WAEpC3P,KAAKkpB,QAAU,CACb9pB,EAAEogB,WACFpgB,EAAE4kB,YACF5kB,EAAEigB,cACFjgB,EAAEykB,aACFzkB,EAAE2iB,iBACF3iB,EAAEiV,WACFjV,EAAEkd,cACFld,EAAEsjB,gBACFtjB,EAAEqd,aACFrd,EAAE8W,aACF9W,EAAEyV,cAIJzV,EAAEsL,iBAAiB+H,KAAKgH,MAAQ,CAC9BpY,KAAMjC,EAAEogB,WACR3T,MAAOzM,EAAE4kB,YACTtJ,QAAStb,EAAEigB,cACX1E,OAAQvb,EAAEykB,aACVjJ,WAAYxb,EAAE2iB,iBACdlH,KAAMzb,EAAEiV,YAGV,IAAMgQ,EAAIrkB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAKkpB,QAE7DlpB,KAAKQ,QAAUpB,EAAE0Q,iBAAiBhO,KAAK9B,KAAM,CAACiT,QAASoR,Q,eCrEzDjlB,EAAEwqB,QAAUxqB,EAAEyqB,MAAMtqB,OAAO,CAEzBuqB,KAAM,2CAENC,SAAU,GAEV1X,OANyB,WAQvB,OADArS,KAAKgqB,WAAWhqB,KAAK+pB,UACd/pB,KAAK8pB,MAGdE,WAXyB,SAWdC,GACTjqB,KAAK8pB,MAAQG,M,eCdjB7qB,EAAEgT,iBAAmBhT,EAAEwqB,QAAQrqB,OAAO,CAEpCwqB,SAEI,8T,eCHN3qB,EAAEihB,eAAiBjhB,EAAEwqB,QAAQrqB,OAAO,CAClCwqB,SACE,uqT,eCHJ3qB,EAAEsQ,IAAIwa,aAAa,CACjBC,cAAc,EACdC,SAAS,IAOXhrB,EAAEsQ,IAAI2a,aAAejrB,EAAEsQ,IAAI4a,QAAQ/qB,OAAO,CACxCO,WADwC,SAC7BQ,GACTN,KAAKO,KAAOD,EACZN,KAAKoQ,WAAa9P,EAAI8P,WACtBpQ,KAAKuqB,MAAQjqB,EAAIkqB,OAAOC,YACxBzqB,KAAK0qB,mBAAqB,EAC1BpqB,EAAII,GAAG,SAAUV,KAAK2qB,SAAU3qB,OAGlCkQ,SATwC,WAUtC9Q,EAAE8B,SAASR,GAAGV,KAAKoQ,WAAY,YAAapQ,KAAK4qB,aAAc5qB,OAGjE8Q,YAbwC,WActC1R,EAAE8B,SAASH,IAAIf,KAAKoQ,WAAY,YAAapQ,KAAK4qB,aAAc5qB,OAGlE6qB,MAjBwC,WAkBtC,OAAO7qB,KAAK8qB,QAGdH,SArBwC,WAsBtCvrB,EAAE6C,QAAQ8O,OAAO/Q,KAAKuqB,cACfvqB,KAAKuqB,OAGdQ,YA1BwC,WA2BtC/qB,KAAK0qB,mBAAqB,EAC1B1qB,KAAK8qB,QAAS,GAGhBE,yBA/BwC,WAgCN,IAA5BhrB,KAAK0qB,qBACPnC,aAAavoB,KAAK0qB,oBAClB1qB,KAAK0qB,mBAAqB,IAI9BE,aAtCwC,SAsC3B5pB,GACX,IAAKA,EAAE8B,UAAyB,IAAZ9B,EAAEiqB,OAA4B,IAAbjqB,EAAEyQ,OACrC,OAAO,EAKTzR,KAAKgrB,2BACLhrB,KAAK+qB,cAEL3rB,EAAE6C,QAAQipB,uBACV9rB,EAAE6C,QAAQkpB,mBAEVnrB,KAAKorB,YAAcprB,KAAKO,KAAK8qB,2BAA2BrqB,GAExD5B,EAAE8B,SAASR,GAAGsR,SAAU,CACtBtQ,YAAatC,EAAE8B,SAASod,KACxBgN,UAAWtrB,KAAKurB,aAChBrD,QAASloB,KAAKwrB,YACbxrB,OAGLurB,aA5DwC,SA4D3BvqB,GACNhB,KAAK8qB,SACR9qB,KAAK8qB,QAAS,EAEd9qB,KAAKyrB,KAAOrsB,EAAE6C,QAAQgP,OAAO,MAAO,mBAAoBjR,KAAKoQ,YAC7DhR,EAAE6C,QAAQ4N,SAAS7P,KAAKoQ,WAAY,qBAEpCpQ,KAAKO,KAAKsI,KAAK,iBAGjB7I,KAAK0rB,OAAS1rB,KAAKO,KAAK8qB,2BAA2BrqB,GAEnDhB,KAAK2rB,QAAUvsB,EAAEwsB,OAAO5rB,KAAKorB,YAAaprB,KAAK0rB,QAC/C,IAAIG,EAAO7rB,KAAK2rB,QAAQG,UAExB1sB,EAAE6C,QAAQ8pB,YAAY/rB,KAAKyrB,KAAMzrB,KAAK2rB,QAAQK,KAE9ChsB,KAAKyrB,KAAKtf,MAAMpG,MAAQ8lB,EAAK5nB,EAAI,KACjCjE,KAAKyrB,KAAKtf,MAAMnG,OAAS6lB,EAAK3nB,EAAI,MAGpC+nB,QAjFwC,WAkFlCjsB,KAAK8qB,SACP1rB,EAAE6C,QAAQ8O,OAAO/Q,KAAKyrB,MACtBrsB,EAAE6C,QAAQ8R,YAAY/T,KAAKoQ,WAAY,sBAGzChR,EAAE6C,QAAQiqB,sBACV9sB,EAAE6C,QAAQkqB,kBAEV/sB,EAAE8B,SAASH,IAAIiR,SAAU,CACvBtQ,YAAatC,EAAE8B,SAASod,KACxBgN,UAAWtrB,KAAKurB,aAChBrD,QAASloB,KAAKwrB,YACbxrB,OAGLwrB,WAjGwC,SAiG7BxqB,GACT,IAAgB,IAAZA,EAAEiqB,OAA4B,IAAbjqB,EAAEyQ,UAIvBzR,KAAKisB,UAEAjsB,KAAK8qB,QAAV,CAIA9qB,KAAKgrB,2BACLhrB,KAAK0qB,mBAAqBpJ,WACtBliB,EAAE6N,KAAKrK,KAAK5C,KAAK+qB,YAAa/qB,MAAO,GAEzC,IAAI4rB,EAASxsB,EAAE4K,aACXhK,KAAKO,KAAK6rB,uBAAuBpsB,KAAK2rB,QAAQU,iBAC9CrsB,KAAKO,KAAK6rB,uBAAuBpsB,KAAK2rB,QAAQW,gBAG9CvhB,EAAO/K,KAAKO,KAAKuJ,UACjBT,EAASrJ,KAAKO,KAAKgJ,YAGvBqiB,EAAS5rB,KAAKO,KAAKmU,8BAA8BkX,EAAQ7gB,EAAM1B,GAE/DrJ,KAAKO,KAAKsI,KAAK,gBAAiB,CAAC2L,iBAAkBoX,QAIvDxsB,EAAEsQ,IAAIC,YAAY,aAAc,eAAgBvQ,EAAEsQ,IAAI2a,e,eCxItDjrB,EAAEsQ,IAAIwa,aAAa,CACjBthB,mBAAmB,IAOrBxJ,EAAEsQ,IAAI6c,kBAAoBntB,EAAEsQ,IAAI8c,gBAAgBjtB,OAAO,CACrDkB,OADqD,WAEnD,IAAIH,EAAMN,KAAKO,KAEf,OAAIP,KAAKyT,WAGLnT,EAAIqI,gBAAgB3G,WACtB1B,EAAIqI,gBAAgB7H,UAGtBd,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAVuBlQ,MAc9Bc,QAlBqD,WAmBnD,OAAKd,KAAKyT,UAEVzT,KAAKyT,UAAW,EAChBzT,KAAK8Q,cAEE9Q,MALsBA,MAQ/BysB,cA3BqD,SA2BvCzrB,GACZ,IAAIV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGPD,GAAMA,EAAG9Q,WAEbxC,EAAIosB,UAAY,EAChB1sB,KAAKO,KAAKosB,cAAgBrL,YAAW,WACd,IAAjBhhB,EAAIosB,UACNpsB,EAAIosB,SAAW,EACfpsB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQulB,OAAUhZ,GAAMA,EAAGiZ,mBAAmBC,kBAClDxsB,EAAIuI,KAAK,cAGZ,OAGLkkB,eAhDqD,WAiDnD,IAAIzsB,EAAMN,KAAKO,KACXysB,EAAS1sB,EAAI2sB,QAEjB3L,YAAW,WACThhB,EAAIosB,SAAW,EACfnE,aAAajoB,EAAIqsB,iBAChB,GAEEK,IAE0B,IAA3BA,EAAOxtB,QAAQ8Y,SACjB0U,EAAOxtB,QAAQ8Y,QAAU,EACzB0U,EAAO/R,WAAW,KAElB+R,EAAOxtB,QAAQ8Y,QAAU,EACzB0U,EAAO/R,WAAW,QAKxB7b,EAAEsQ,IAAIC,YAAY,aAAc,oBAAqBvQ,EAAEsQ,IAAI6c,oB,eCxE3DntB,EAAEsQ,IAAI8c,gBAAgBU,QAAQ,CAC5Bhd,SAD4B,WAE1BlQ,KAAKO,KAAKG,GAAG,CACXipB,MAAO3pB,KAAKysB,cACZvT,SAAUlZ,KAAK+sB,gBACd/sB,OAGL8Q,YAR4B,WAS1B9Q,KAAKO,KAAKQ,IAAI,CACZ4oB,MAAO3pB,KAAKysB,cACZvT,SAAUlZ,KAAK+sB,gBACd/sB,OAGLS,OAf4B,WAgB1B,OAAIT,KAAKyT,UAGLzT,KAAKO,KAAKqI,mBACR5I,KAAKO,KAAKqI,kBAAkB5G,YAMlChC,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAbuBlQ,MAiB9Bc,QAjC4B,WAkC1B,OAAKd,KAAKyT,UAGVzT,KAAKO,KAAKsI,KAAK,kBAEf7I,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAPsBA,MAU/BysB,cA5C4B,SA4CdzrB,GACZ,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGTD,GAAMA,EAAG9Q,WAEbxC,EAAIosB,UAAY,EAChB1sB,KAAKO,KAAKosB,cAAgBrL,YAAW,WACd,IAAjBhhB,EAAIosB,UACNpsB,EAAIosB,SAAW,EACfpsB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQulB,OAAUhZ,GAAMA,EAAGiZ,mBAAmBC,kBAIlDxsB,EAAI6sB,cAAcvZ,EAAI,WAAY,CAACtT,MAGtC,OAGLysB,eApE4B,SAoEb/rB,GACb,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAOb,GALAyN,YAAW,WACThhB,EAAIosB,SAAW,EACfnE,aAAajoB,EAAIqsB,iBAChB,IAEE/Y,EAAM,OAAO,EAElB,IAAMwZ,EAAU9sB,EAAIwJ,UACdxG,EAAQhD,EAAId,QAAQ6tB,UACpBtiB,EAAO6I,EAAG9Q,SAAWsqB,EAAU9pB,EAAQ8pB,EAAU9pB,EAEnB,WAAhChD,EAAId,QAAQmJ,gBACdrI,EAAIgtB,QAAQviB,GAEZzK,EAAIitB,cAAcvsB,EAAEwsB,eAAgBziB,O,eC1F1C3L,EAAEsQ,IAAIwd,QAAQ,CAEZR,SAAU,EAEVe,gBAJY,SAIIpX,GAiCd,OA9BAA,EAAOrW,KAAK0tB,cAAgBtuB,EAAEG,OAAO,CACnCouB,cAAe,GACfC,QAAS,GACTC,cAAe,GACfC,QAAS,EACTd,QAAQ,EACRe,aAAc,EACdnlB,mBAAmB,GAClByN,IAEO2W,SACRhtB,KAAK0tB,cAAgBtuB,EAAEG,OAAOS,KAAK0tB,cAAe,CAChDK,aAAc1X,EAAK2W,OAAS,OAAI3X,EAChCzM,oBAAmByN,EAAK2W,aAAgB3X,KAI5CrV,KAAKguB,cAAgB5uB,EAAE6uB,UAnBX,oDAmB0B,CACpCL,QAASvX,EAAKuX,QACdC,cAAexX,EAAKwX,cACpBC,QAASzX,EAAKyX,QACdxV,QAASjC,EAAKsX,gBACb/b,MAAM5R,MAELqW,EAAK2W,OAAUhtB,KAAKkuB,WAAW7X,GAGjCrW,KAAK4I,uBAAoByM,EAGpBrV,MAGTkuB,WAxCY,SAwCD7X,GAsBT,OAnB0B,IAAtBA,EAAK0X,cAA4C,IAAtB1X,EAAK0X,eAClC1X,EAAK0X,aAAe,GAGtB/tB,KAAKitB,QAAU7tB,EAAE6uB,UANL,8EAMoB,CAC9BE,YAAa,0OACbC,WAAY,OACZrG,aAAa,EACbzP,QAASjC,EAAK0X,aACdH,QAASvX,EAAKuX,QACdC,cAAexX,EAAKwX,cACpBC,QAASzX,EAAKyX,QACdO,IAAK,QACJzc,MAAM5R,MAELA,KAAK0tB,cAAc9kB,mBACrB5I,KAAK4I,kBAAkBnI,SAGlBT,QAKXZ,EAAEsQ,IAAIC,aAAY,WAChB3P,KAAK4I,kBAAkB9H,UACvBd,KAAK2I,gBAAgBlI,a,eCtEvBrB,EAAE6C,QAAU7C,EAAEG,OAAOH,EAAE6C,QAAS,CAC9B7B,gBAD8B,SACdkuB,GACdtuB,KAAKyO,YAAc6f,GAGrB9f,gBAL8B,SAKd+f,GACd,IAAMtgB,EAAO7O,EAAEiI,QAAQ6G,UAAY9O,EAAEiI,QAAQmnB,SAAWpvB,EAAEiI,QAAQonB,KAS5DviB,EAAS,CACbqiB,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjBA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjB,EAAG,EAAG,EAAG,EACTA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,IAGbG,EAAMzgB,EAAO,YAAc/B,EAAOyC,KAAK,KAAO,IAAM,GAQ1D,OANKV,GACH+I,QACKC,IAAI,uFAIJyX,GAGTxsB,YAjC8B,SAiClBgQ,EAAIL,GACd,IAAM3O,EAAI2O,EACV,OAAO7R,KAAKyC,SAASyP,EAAIhP,GACvBlD,KAAK+T,YAAY7B,EAAIhP,GAAKlD,KAAK6P,SAASqC,EAAIhP,IAGhD4Z,cAvC8B,WAwC5B,OAAO1D,OAAOuV,QAAQ3uB,KAAKyO,YAAYmgB,qBAGzC5Z,eA3C8B,SA2CfD,GACb,GAAU,IAANA,EAAW,OAAO/U,KAAK8c,gBAE3B,IACI+R,EADEpgB,EAAczO,KAAKyO,YAAYqgB,qBASrC,OALED,EADyB,mBAAhBpgB,EACIA,EAAYsG,GAEZtG,EAGR2K,OAAOuV,QAAQE,O,cCvD1BzvB,EAAEkS,SAAW,CAMXL,OANW,SAMJ8d,GAKL,MAJI,KAAKC,KAAKD,KACZA,EAAMA,EAAIE,QAAQ,KAAM,KAIxB,4BAA8BF,EAA9B,mDACuBA,EADvB,kBAMJjN,cAlBW,SAkBG9Q,EAAWke,GACvB,IAAMrQ,EAAM7N,EAAUiB,cAAc,OAEhC4M,GACFzf,EAAE6C,QAAQ4N,SAASgP,EAAKqQ,IAK5BlQ,YA3BW,SA2BChO,EAAWme,EAAMC,GACtB,KAAKJ,KAAKG,KACbA,EAAO,IAAMA,GAEV,KAAKH,KAAKI,KACbA,EAAO,IAAMA,GAGf,IAAM5Q,EAAMxN,EAAUiB,cAAc,OACpC,GAAIuM,EAAK,CACP,IAAM6Q,EAAU7Q,EAAI8Q,aAAa,gBAAkBH,EAAOC,EAAOD,EAEjE,OADA3Q,EAAItN,aAAa,aAAcme,GACxBA,EAET,OAAO,GAGTvd,YA5CW,SA4CCd,EAAWue,EAAQC,GAC7B,IAAMH,EAAUre,EAAUse,aAAa,WAAaC,EAASC,EAASD,EAMtE,OAJAve,EAAUE,aAAa,QAASme,GAC5Bre,EAAUye,aAAa,eACzBze,EAAUE,aAAa,aAAcme,GAEhCA,K,eCnDXjwB,EAAE+G,UAAY,CAEZC,cAFY,SAEE5D,GACZ,IAAIlC,EAAMkC,EAAQjC,KAMlB,OAAe,IAJJD,EACN8C,mBAAmBZ,EAAQW,UAAU,IACrCusB,WAAWpvB,EAAI8C,mBAAmBZ,EAAQW,UAAU,KAEnCX,EAAQjB,aAAawE,S,eCT/C3G,EAAEmQ,WAAa,CAGbogB,IAHa,SAGTpB,GACF,MAAO,CACLA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAK/DqB,OAZa,SAYNvL,EAAGtF,GACR,IACI/b,EADEE,EAAI,GAGV,IAAKF,EAAI,EAAGA,EAAI,EAAGA,IACjB,IAAK,IAAIiM,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAG1B,IAFA,IAAI4gB,EAAM,EAEDpkB,EAAI,EAAGA,EAAI,EAAGA,IACrBokB,GAAOxL,EAAE,EAAErhB,EAAIyI,GAAGsT,EAAE,EAAEtT,EAAIwD,GAG5B/L,EAAE,EAAEF,EAAIiM,GAAK4gB,EAIjB,OAAO3sB,GAIT4sB,OAhCa,SAgCNvB,EAAGwB,GACR,MAAO,CACLxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAC/BxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAC/BxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,KAKnCC,OAzCa,SAyCN9L,EAAGqK,GAGR,IAFA,IAAMriB,EAAS,GAENlJ,EAAI,EAAGuf,EAAIgM,EAAE1pB,OAAQ7B,EAAIuf,EAAGvf,IACnCkJ,EAAOtG,KAAKse,EAAEqK,EAAEvrB,IAGlB,OAAOkJ,GAGT+jB,cAnDa,SAmDCC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACxC,IAAMlC,EAAI,CACR2B,EAAIE,EAAIE,EACRH,EAAIE,EAAIE,EACR,EAAG,EAAG,GAEJR,EAAI3wB,EAAEmQ,WAAWugB,OAAO1wB,EAAEmQ,WAAWogB,IAAIpB,GAAI,CAACiC,EAAIC,EAAI,IAE1D,OAAOrxB,EAAEmQ,WAAWqgB,OAAOrB,EAAG,CAC5BwB,EAAE,GAAI,EAAG,EACT,EAAGA,EAAE,GAAI,EACT,EAAG,EAAGA,EAAE,MAIZzmB,QAlEa,SAkELilB,EAAGtqB,EAAGC,GACZ,IAAI6rB,EAAI3wB,EAAEmQ,WAAWugB,OAAOvB,EAAG,CAACtqB,EAAGC,EAAG,IAEtC,MAAO,CAAC6rB,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,KAG5BvgB,oBAxEa,SAyETkhB,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,GAEjB,IAAIvN,EAAI9kB,EAAEmQ,WAAW0gB,cAAcS,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClEhS,EAAIngB,EAAEmQ,WAAW0gB,cAAcW,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClElD,EAAInvB,EAAEmQ,WAAWqgB,OAAOrQ,EAAGngB,EAAEmQ,WAAWogB,IAAIzL,IAKhD,OAAO9kB,EAAEmQ,WAAWygB,OAAO,EAAEzB,EAAE,GAAIA,M,eCrFvCnvB,EAAEwN,SAAW,CAEXC,UAFW,SAED5I,EAAGC,GAAiB,IAAd+H,EAAc,uDAAP,MACrB,MAAgB,QAATA,EACHjM,KAAKgN,iBAAiB3B,KAAKmc,MAAMtjB,EAAGD,IACpCoH,KAAKmc,MAAMtjB,EAAGD,IAGpB+I,iBARW,SAQML,GACf,OAAgB,IAARA,EAAetB,KAAKyB,IAG9BS,iBAZW,SAYMZ,GACf,OAAQA,EAAQtB,KAAKyB,GAAM,O,eCb/B1N,EAAEe,MAAQ,CACRC,gBADQ,WAEN,IAAMqO,EAAc,CAClByQ,YAAa,eACbE,aAAc,gBACdE,aAAc,gBACdG,UAAW,aACXmB,YAAa,eACbC,aAAc,gBACdnC,aAAc,gBACdC,UAAW,aACXqD,gBAAiB,oBACjBG,eAAgB,kBAChBK,SAAU,YACVC,WAAY,cACZE,gBAAiB,oBACjBC,qBAAsB,yBACtBgB,aAAc,wBACdE,YAAa,eACbG,WAAY,cACZE,aAAc,iBACdC,YAAa,gBACbE,aAAc,gBACdsK,mBACE,qEACFE,qBACE,wEAGJ,GAAK9uB,KAAKR,QAAQiP,YAIhB,IAAK,IAAMkF,KAAOlF,EACXzO,KAAKR,QAAQiP,YAAY8O,eAAe5J,KAC3C3T,KAAKR,QAAQiP,YAAYkF,GAAOlF,EAAYkF,SALhD3T,KAAKR,QAAQiP,YAAcA,EAU7BrP,EAAE6C,QAAQ7B,gBAAgBJ,KAAKR,QAAQiP,cAGzC0E,aA3CQ,SA2CKmb,EAAK3a,EAAK+d,GAErB,MADY,CAAC/d,EAAK+d,GACPjtB,QAAO,SAAS6pB,EAAK7iB,GAC9B,OAAO6iB,GAAOA,EAAI7iB,KACjB6iB,OC7CPqD,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,O","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 this.subToolBar = options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n console.log(this.subToolBar);\n console.log(this.subToolBar.enabled());\n (this.subToolBar.enabled()) ? this.subToolBar.disable() : this.subToolBar.enabled();\n (this.subToolBar.enabled()) ? this.subToolBar.hide() : this.subToolBar.show();\n\n // const edit = this._overlay.editing;\n // const link = this._link;\n\n // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolBar","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","hide","show","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 474862872..435c559a6 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -32,10 +32,10 @@ L.OpacitiesAction = L.EditAction.extend({ addHooks() { console.log(this.subToolBar); - console.log(this.subToolBar.isPopupOpen()); - if (this.subToolBar) { + console.log(this.subToolBar.enabled()); + (this.subToolBar.enabled()) ? this.subToolBar.disable() : this.subToolBar.enabled(); + (this.subToolBar.enabled()) ? this.subToolBar.hide() : this.subToolBar.show(); - } // const edit = this._overlay.editing; // const link = this._link; From 8e51d8a33eeaecdb4224fa9ecf37fea5c225fa14 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 22:48:43 +0200 Subject: [PATCH 46/73] sub-menu test 34 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 9 +++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index e44a2741b..6fcb2550a 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":""},this.subToolBar=c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){console.log(this.subToolBar),console.log(this.subToolBar.enabled()),this.subToolBar.enabled()?this.subToolBar.disable():this.subToolBar.enabled(),this.subToolBar.enabled()?this.subToolBar.hide():this.subToolBar.show()}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":"subtoolbar-enabled"},this.subToolBar=c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){console.log(this.subToolBar),console.log(this.subToolBar._ul.hidden),console.log(this._overlay.editing),this.subToolBar._ul.hidden?this.subToolBar.disable():this.subToolBar.enabled(),this.subToolBar._ul.hidden?this.subToolBar.hide():this.subToolBar.show()}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 48c3ed647..a861b168d 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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 this.subToolBar = options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n console.log(this.subToolBar);\n console.log(this.subToolBar.enabled());\n (this.subToolBar.enabled()) ? this.subToolBar.disable() : this.subToolBar.enabled();\n (this.subToolBar.enabled()) ? this.subToolBar.hide() : this.subToolBar.show();\n\n // const edit = this._overlay.editing;\n // const link = this._link;\n\n // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolBar","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","hide","show","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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' : 'subtoolbar-enabled',\n };\n\n this.subToolBar = options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n console.log(this.subToolBar);\n console.log(this.subToolBar._ul.hidden);\n console.log(this._overlay.editing);\n (this.subToolBar._ul.hidden) ? this.subToolBar.disable() : this.subToolBar.enabled();\n (this.subToolBar._ul.hidden) ? this.subToolBar.hide() : this.subToolBar.show();\n\n // const edit = this._overlay.editing;\n // const link = this._link;\n\n // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolBar","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","_ul","hidden","hide","show","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 435c559a6..4d729f1fc 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -18,7 +18,7 @@ L.OpacitiesAction = L.EditAction.extend({ svg: true, html: use, tooltip: tooltip, - className: mode === 'lock' ? 'disabled' : '', + className: mode === 'lock' ? 'disabled' : 'subtoolbar-enabled', }; this.subToolBar = options.subToolbar = new L.Toolbar2({ @@ -32,9 +32,10 @@ L.OpacitiesAction = L.EditAction.extend({ addHooks() { console.log(this.subToolBar); - console.log(this.subToolBar.enabled()); - (this.subToolBar.enabled()) ? this.subToolBar.disable() : this.subToolBar.enabled(); - (this.subToolBar.enabled()) ? this.subToolBar.hide() : this.subToolBar.show(); + console.log(this.subToolBar._ul.hidden); + console.log(this._overlay.editing); + (this.subToolBar._ul.hidden) ? this.subToolBar.disable() : this.subToolBar.enabled(); + (this.subToolBar._ul.hidden) ? this.subToolBar.hide() : this.subToolBar.show(); // const edit = this._overlay.editing; // const link = this._link; From 8e4a634aef696139ea0af463f16769a04b9de0c3 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 23:06:07 +0200 Subject: [PATCH 47/73] sub-menu test 35 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/DistortableImage.Edit.js | 4 ++++ src/edit/actions/OpacitiesAction.js | 13 +++++++++++-- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 6fcb2550a..c9eacf4a1 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":"subtoolbar-enabled"},this.subToolBar=c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){console.log(this.subToolBar),console.log(this.subToolBar._ul.hidden),console.log(this._overlay.editing),this.subToolBar._ul.hidden?this.subToolBar.disable():this.subToolBar.enabled(),this.subToolBar._ul.hidden?this.subToolBar.hide():this.subToolBar.show()}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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")},_opacitiesMode:function(){this.setMode("opacities")},_toggleLockMode:function(){this.isMode("lock")?this._unlock():this._lock()},_toggleOpacity:function(){var t,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":"subtoolbar-enabled"},this.subToolBar=c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){var t=this._ovelay.editing;console.log(this.subToolBar),console.log(this.subToolBar._ul.hidden),console.log(this._overlay.editing),this_overlay.isMode("opacities")?(this.subToolBar.disable(),this.subToolBar.hide(),t.setMode("")):(this.subToolBar.enabled(),this.subToolBar.show(),t._opacitiesMode())}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 a861b168d..44e469aaa 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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' : 'subtoolbar-enabled',\n };\n\n this.subToolBar = options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n console.log(this.subToolBar);\n console.log(this.subToolBar._ul.hidden);\n console.log(this._overlay.editing);\n (this.subToolBar._ul.hidden) ? this.subToolBar.disable() : this.subToolBar.enabled();\n (this.subToolBar._ul.hidden) ? this.subToolBar.hide() : this.subToolBar.show();\n\n // const edit = this._overlay.editing;\n // const link = this._link;\n\n // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolBar","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","_ul","hidden","hide","show","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let 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 _opacitiesMode() {\n this.setMode('opacities');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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' : 'subtoolbar-enabled',\n };\n\n this.subToolBar = options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._ovelay.editing;\n console.log(this.subToolBar);\n console.log(this.subToolBar._ul.hidden);\n console.log(this._overlay.editing);\n\n if (this_overlay.isMode('opacities')) {\n this.subToolBar.disable();\n this.subToolBar.hide();\n edit.setMode('');\n } else {\n this.subToolBar.enabled();\n this.subToolBar.show();\n edit._opacitiesMode();\n };\n\n // const edit = this._overlay.editing;\n // const link = this._link;\n\n // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_opacitiesMode","_toggleLockMode","_toggleOpacity","OpacityAction","_refresh","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolBar","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","_ovelay","_ul","hidden","this_overlay","hide","show","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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","m","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/src/edit/DistortableImage.Edit.js b/src/edit/DistortableImage.Edit.js index 088d640f2..e7c4fd462 100644 --- a/src/edit/DistortableImage.Edit.js +++ b/src/edit/DistortableImage.Edit.js @@ -340,6 +340,10 @@ L.DistortableImage.Edit = L.Handler.extend({ this.setMode('freeRotate'); }, + _opacitiesMode() { + this.setMode('opacities'); + }, + _toggleLockMode() { if (this.isMode('lock')) { this._unlock(); } else { this._lock(); } diff --git a/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 4d729f1fc..0096b42a7 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -31,11 +31,20 @@ L.OpacitiesAction = L.EditAction.extend({ }, addHooks() { + const edit = this._ovelay.editing; console.log(this.subToolBar); console.log(this.subToolBar._ul.hidden); console.log(this._overlay.editing); - (this.subToolBar._ul.hidden) ? this.subToolBar.disable() : this.subToolBar.enabled(); - (this.subToolBar._ul.hidden) ? this.subToolBar.hide() : this.subToolBar.show(); + + if (this_overlay.isMode('opacities')) { + this.subToolBar.disable(); + this.subToolBar.hide(); + edit.setMode(''); + } else { + this.subToolBar.enabled(); + this.subToolBar.show(); + edit._opacitiesMode(); + }; // const edit = this._overlay.editing; // const link = this._link; From 4752dc567356e2c1a456ea04b2d3dd7b5f52c2fa Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 23:10:50 +0200 Subject: [PATCH 48/73] sub-menu test 36 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/DistortableImage.Edit.js | 8 ++++++++ src/edit/actions/OpacitiesAction.js | 6 +++--- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index c9eacf4a1..8bb07eb0e 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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")},_opacitiesMode:function(){this.setMode("opacities")},_toggleLockMode:function(){this.isMode("lock")?this._unlock():this._lock()},_toggleOpacity:function(){var t,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":"subtoolbar-enabled"},this.subToolBar=c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){var t=this._ovelay.editing;console.log(this.subToolBar),console.log(this.subToolBar._ul.hidden),console.log(this._overlay.editing),this_overlay.isMode("opacities")?(this.subToolBar.disable(),this.subToolBar.hide(),t.setMode("")):(this.subToolBar.enabled(),this.subToolBar.show(),t._opacitiesMode())}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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")},_opacitiesMode:function(){this.setMode("opacities")},_toggleOpacitiesMode:function(){this.isMode("opacities")?this.setMode(""):this._opacitiesMode()},_toggleLockMode:function(){this.isMode("lock")?this._unlock():this._lock()},_toggleOpacity:function(){var t,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":"subtoolbar-enabled"},this.subToolBar=c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){var t=this._ovelay.editing;console.log(this.subToolBar),console.log(this.subToolBar._ul.hidden),console.log(this._overlay.editing),console.log(this._overlay.editing.getModes()),this._overlay.isMode("opacities")?(this.subToolBar.disable(),this.subToolBar.hide()):(this.subToolBar.enabled(),this.subToolBar.show()),t._toggleOpacitiesMode()}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 44e469aaa..3d57de96e 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let 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 _opacitiesMode() {\n this.setMode('opacities');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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' : 'subtoolbar-enabled',\n };\n\n this.subToolBar = options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._ovelay.editing;\n console.log(this.subToolBar);\n console.log(this.subToolBar._ul.hidden);\n console.log(this._overlay.editing);\n\n if (this_overlay.isMode('opacities')) {\n this.subToolBar.disable();\n this.subToolBar.hide();\n edit.setMode('');\n } else {\n this.subToolBar.enabled();\n this.subToolBar.show();\n edit._opacitiesMode();\n };\n\n // const edit = this._overlay.editing;\n // const link = this._link;\n\n // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_opacitiesMode","_toggleLockMode","_toggleOpacity","OpacityAction","_refresh","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolBar","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","_ovelay","_ul","hidden","this_overlay","hide","show","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let 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 _opacitiesMode() {\n this.setMode('opacities');\n },\n\n _toggleOpacitiesMode() {\n if (this.isMode('opacities')) {\n this.setMode('');\n } else {\n this._opacitiesMode();\n };\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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' : 'subtoolbar-enabled',\n };\n\n this.subToolBar = options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._ovelay.editing;\n console.log(this.subToolBar);\n console.log(this.subToolBar._ul.hidden);\n console.log(this._overlay.editing);\n console.log(this._overlay.editing.getModes());\n\n if (this._overlay.isMode('opacities')) {\n this.subToolBar.disable();\n this.subToolBar.hide();\n } else {\n this.subToolBar.enabled();\n this.subToolBar.show();\n };\n edit._toggleOpacitiesMode();\n\n // const edit = this._overlay.editing;\n // const link = this._link;\n\n // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_opacitiesMode","_toggleOpacitiesMode","_toggleLockMode","_toggleOpacity","OpacityAction","_refresh","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolBar","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","_ovelay","_ul","hidden","hide","show","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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","m","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/src/edit/DistortableImage.Edit.js b/src/edit/DistortableImage.Edit.js index e7c4fd462..6fa80dd80 100644 --- a/src/edit/DistortableImage.Edit.js +++ b/src/edit/DistortableImage.Edit.js @@ -344,6 +344,14 @@ L.DistortableImage.Edit = L.Handler.extend({ this.setMode('opacities'); }, + _toggleOpacitiesMode() { + if (this.isMode('opacities')) { + this.setMode(''); + } else { + this._opacitiesMode(); + }; + }, + _toggleLockMode() { if (this.isMode('lock')) { this._unlock(); } else { this._lock(); } diff --git a/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 0096b42a7..4e045d7ae 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -35,16 +35,16 @@ L.OpacitiesAction = L.EditAction.extend({ console.log(this.subToolBar); console.log(this.subToolBar._ul.hidden); console.log(this._overlay.editing); + console.log(this._overlay.editing.getModes()); - if (this_overlay.isMode('opacities')) { + if (this._overlay.isMode('opacities')) { this.subToolBar.disable(); this.subToolBar.hide(); - edit.setMode(''); } else { this.subToolBar.enabled(); this.subToolBar.show(); - edit._opacitiesMode(); }; + edit._toggleOpacitiesMode(); // const edit = this._overlay.editing; // const link = this._link; From 791f966d82d6eb95dbe13a265f2c9f2f3790eadd Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 23 Oct 2022 23:13:11 +0200 Subject: [PATCH 49/73] sub-menu test 37 --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 8bb07eb0e..df2009f82 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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")},_opacitiesMode:function(){this.setMode("opacities")},_toggleOpacitiesMode:function(){this.isMode("opacities")?this.setMode(""):this._opacitiesMode()},_toggleLockMode:function(){this.isMode("lock")?this._unlock():this._lock()},_toggleOpacity:function(){var t,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":"subtoolbar-enabled"},this.subToolBar=c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){var t=this._ovelay.editing;console.log(this.subToolBar),console.log(this.subToolBar._ul.hidden),console.log(this._overlay.editing),console.log(this._overlay.editing.getModes()),this._overlay.isMode("opacities")?(this.subToolBar.disable(),this.subToolBar.hide()):(this.subToolBar.enabled(),this.subToolBar.show()),t._toggleOpacitiesMode()}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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")},_opacitiesMode:function(){this.setMode("opacities")},_toggleOpacitiesMode:function(){this.isMode("opacities")?this.setMode(""):this._opacitiesMode()},_toggleLockMode:function(){this.isMode("lock")?this._unlock():this._lock()},_toggleOpacity:function(){var t,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":"subtoolbar-enabled"},this.subToolBar=c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){var t=this._overlay.editing;console.log(this.subToolBar),console.log(this.subToolBar._ul.hidden),console.log(t),console.log(t.getModes()),this._overlay.isMode("opacities")?(this.subToolBar.disable(),this.subToolBar.hide()):(this.subToolBar.enabled(),this.subToolBar.show()),t._toggleOpacitiesMode()}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 3d57de96e..2a2bca461 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let 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 _opacitiesMode() {\n this.setMode('opacities');\n },\n\n _toggleOpacitiesMode() {\n if (this.isMode('opacities')) {\n this.setMode('');\n } else {\n this._opacitiesMode();\n };\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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' : 'subtoolbar-enabled',\n };\n\n this.subToolBar = options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._ovelay.editing;\n console.log(this.subToolBar);\n console.log(this.subToolBar._ul.hidden);\n console.log(this._overlay.editing);\n console.log(this._overlay.editing.getModes());\n\n if (this._overlay.isMode('opacities')) {\n this.subToolBar.disable();\n this.subToolBar.hide();\n } else {\n this.subToolBar.enabled();\n this.subToolBar.show();\n };\n edit._toggleOpacitiesMode();\n\n // const edit = this._overlay.editing;\n // const link = this._link;\n\n // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_opacitiesMode","_toggleOpacitiesMode","_toggleLockMode","_toggleOpacity","OpacityAction","_refresh","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolBar","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","_ovelay","_ul","hidden","hide","show","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let 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 _opacitiesMode() {\n this.setMode('opacities');\n },\n\n _toggleOpacitiesMode() {\n if (this.isMode('opacities')) {\n this.setMode('');\n } else {\n this._opacitiesMode();\n };\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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' : 'subtoolbar-enabled',\n };\n\n this.subToolBar = options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n console.log(this.subToolBar);\n console.log(this.subToolBar._ul.hidden);\n console.log(edit);\n console.log(edit.getModes());\n\n if (this._overlay.isMode('opacities')) {\n this.subToolBar.disable();\n this.subToolBar.hide();\n } else {\n this.subToolBar.enabled();\n this.subToolBar.show();\n };\n edit._toggleOpacitiesMode();\n\n // const edit = this._overlay.editing;\n // const link = this._link;\n\n // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_opacitiesMode","_toggleOpacitiesMode","_toggleLockMode","_toggleOpacity","OpacityAction","_refresh","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolBar","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","_ul","hidden","hide","show","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 4e045d7ae..e657ef118 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -31,11 +31,11 @@ L.OpacitiesAction = L.EditAction.extend({ }, addHooks() { - const edit = this._ovelay.editing; + const edit = this._overlay.editing; console.log(this.subToolBar); console.log(this.subToolBar._ul.hidden); - console.log(this._overlay.editing); - console.log(this._overlay.editing.getModes()); + console.log(edit); + console.log(edit.getModes()); if (this._overlay.isMode('opacities')) { this.subToolBar.disable(); From bce902cc473f799bb04d0274381516fe9b421e66 Mon Sep 17 00:00:00 2001 From: themacboy Date: Mon, 24 Oct 2022 07:53:05 +0200 Subject: [PATCH 50/73] sub-menu final test, pending a few know issues --- assets/icons/svg-min/opacities.svg | 2 +- assets/icons/svg/opacities.svg | 2 +- assets/icons/symbol/sprite.symbol.html | 2 +- assets/icons/symbol/sprite.symbol.svg | 2 +- dist/leaflet.distortableimage.css | 13 -- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/DistortableImage.Edit.js | 28 +++-- src/edit/actions/EditAction.js | 11 +- src/edit/actions/OpacitiesAction.js | 164 ++++++------------------- src/iconsets/ToolbarIconSet.js | 2 +- 11 files changed, 67 insertions(+), 163 deletions(-) diff --git a/assets/icons/svg-min/opacities.svg b/assets/icons/svg-min/opacities.svg index 7823bd994..78ac05d14 100644 --- a/assets/icons/svg-min/opacities.svg +++ b/assets/icons/svg-min/opacities.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/svg/opacities.svg b/assets/icons/svg/opacities.svg index eaac286a3..b6145ad77 100644 --- a/assets/icons/svg/opacities.svg +++ b/assets/icons/svg/opacities.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/assets/icons/symbol/sprite.symbol.html b/assets/icons/symbol/sprite.symbol.html index a6bbd4c8e..5a9640619 100644 --- a/assets/icons/symbol/sprite.symbol.html +++ b/assets/icons/symbol/sprite.symbol.html @@ -77,7 +77,7 @@ - + diff --git a/assets/icons/symbol/sprite.symbol.svg b/assets/icons/symbol/sprite.symbol.svg index 44852a740..0ba34cb16 100644 --- a/assets/icons/symbol/sprite.symbol.svg +++ b/assets/icons/symbol/sprite.symbol.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 578fa6d4a..52c7b9ad7 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -227,7 +227,6 @@ a.leaflet-toolbar-icon[title='Loading...'] { height: 30px !important; line-height: 30px !important; padding-right: 0 !important; - border-right: 0 !important; text-align: center !important; text-decoration: none !important; background-color: #fff; @@ -242,18 +241,6 @@ a.leaflet-toolbar-icon[title='Loading...'] { background-color: #fff !important; } -.leaflet-toolbar-icon-range { - /*display: inline-block !important; - writing-mode: bt-lr !important; - appearance: slider-vertical !important; - -webkit-appearance: slider-vertical !important; - transform: rotate(90deg); - width: auto; - height: 120px !important;*/ - float: none !important; - margin: auto !important; -} - input[type="text"]::-webkit-input-placeholder { color: #979797; } diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index df2009f82..43ef4cd4f 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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")},_opacitiesMode:function(){this.setMode("opacities")},_toggleOpacitiesMode:function(){this.isMode("opacities")?this.setMode(""):this._opacitiesMode()},_toggleLockMode:function(){this.isMode("lock")?this._unlock():this._lock()},_toggleOpacity:function(){var t,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing;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),n.style&&this._link.setAttribute("style",n.style),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===s._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(){L.OpacitiesAction=L.EditAction.extend({initialize:function(r,l,c){var d,h,g=l.editing,m=g._mode;g._transparent?(d="opacity_empty",h=l.options.translation.makeImageOpaque):(d="opacities",h=l.options.translation.makeImageTransparent),(c=c||{}).toolbarIcon={svg:!0,html:d,tooltip:h,className:"lock"===m?"disabled":"subtoolbar-enabled"},this.subToolBar=c.subToolbar=new L.Toolbar2({actions:[a,n,o,i,e,t,s]}),L.EditAction.prototype.initialize.call(this,r,l,c)},addHooks:function(){var t=this._overlay.editing;console.log(this.subToolBar),console.log(this.subToolBar._ul.hidden),console.log(t),console.log(t.getModes()),this._overlay.isMode("opacities")?(this.subToolBar.disable(),this.subToolBar.hide()):(this.subToolBar.enabled(),this.subToolBar.show()),t._toggleOpacitiesMode()}});var t=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 0%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.01;"}},addHooks:function(){}}),e=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 20%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.2;"}},addHooks:function(){}}),i=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 40%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.4;"}},addHooks:function(){}}),o=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 60%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.6;"}},addHooks:function(){}}),n=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 80%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:0.8;"}},addHooks:function(){}}),a=L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity 100%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:1;"}},addHooks:function(){}}),s=L.EditAction.extend({options:{toolbarIcon:{html:"✖",tooltip:"Cancel",className:"leaflet-toolbar-icon-vertical",style:"font-size:1.25rem;"}},addHooks:function(){this.disable(),this.toolbar._hide()}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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()},enable:function(t){t&&L.DomEvent.preventDefault(t),t&&L.DomEvent.stopPropagation(t),this._enabled||(this._enabled=!0,this.addHooks&&this.addHooks())},_createIcon:function(t,e,i){var o=this,n=this.options.toolbarIcon,a=n.className,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];t=t.map((function(t){return L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity "+t+"%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:"+t/100+";"}},addHooks:function(){console.log(this),this._overlay.editing._setOpacities(t/100)}})})),console.log(t),L.OpacitiesAction=L.EditAction.extend({initialize:function(e,i,o){var n,a,s=i.editing,r=s._mode;s._transparent?(n="opacity_empty",a=i.options.translation.makeImageOpaque):(n="opacities",a=i.options.translation.makeImageTransparent),(o=o||{}).toolbarIcon={svg:!0,html:n,tooltip:a,className:"lock"===r?"disabled":""},o.subToolbar=new L.Toolbar2({actions:t}),L.DistortableImage.action_map.o="lock"===r?"":"_toggleOpacities",L.EditAction.prototype.initialize.call(this,e,i,o)},addHooks:function(){var t=this,e=this._link;L.DomUtil.hasClass(e,"subtoolbar_enabled")?(L.DomUtil.removeClass(e,"subtoolbar_enabled"),setTimeout((function(){t.options.subToolbar._hide()}),100)):L.DomUtil.addClass(e,"subtoolbar_enabled"),L.IconUtil.toggleXlink(e,"opacities","cancel"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Cancel")}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 2a2bca461..856487cdc 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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\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\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let 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 _opacitiesMode() {\n this.setMode('opacities');\n },\n\n _toggleOpacitiesMode() {\n if (this.isMode('opacities')) {\n this.setMode('');\n } else {\n this._opacitiesMode();\n };\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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\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 (iconOptions.style) { this._link.setAttribute('style', iconOptions.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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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","L.OpacitiesAction = 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 = 'opacities';\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' : 'subtoolbar-enabled',\n };\n\n this.subToolBar = options.subToolbar = new L.Toolbar2({\n actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel],\n });\n // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n // L.setOptions(this, options);\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n console.log(this.subToolBar);\n console.log(this.subToolBar._ul.hidden);\n console.log(edit);\n console.log(edit.getModes());\n\n if (this._overlay.isMode('opacities')) {\n this.subToolBar.disable();\n this.subToolBar.hide();\n } else {\n this.subToolBar.enabled();\n this.subToolBar.show();\n };\n edit._toggleOpacitiesMode();\n\n // const edit = this._overlay.editing;\n // const link = this._link;\n\n // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty');\n // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n // edit._toggleOpacity();\n },\n});\n\nconst OpacitiesBar0 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 0%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.01;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar20 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 20%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.2;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar40 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 40%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.4;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar60 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 60%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.6;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar80 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 80%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:0.8;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst OpacitiesBar100 = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity 100%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:1;',\n },\n },\n addHooks: () => {\n // this.map.setView([48.85815, 2.29420], 19);\n // OpacitiesSubAction.prototype.addHooks.call(this);\n },\n});\n\nconst Cancel = L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '✖',\n tooltip: 'Cancel',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'font-size:1.25rem;',\n },\n },\n\n addHooks() {\n this.disable();\n this.toolbar._hide();\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","indexOf","_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","_opacitiesMode","_toggleOpacitiesMode","_toggleLockMode","_toggleOpacity","OpacityAction","_refresh","_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","OpacitiesAction","makeImageOpaque","makeImageTransparent","subToolBar","subToolbar","OpacitiesBar100","OpacitiesBar80","OpacitiesBar60","OpacitiesBar40","OpacitiesBar20","OpacitiesBar0","Cancel","_ul","hidden","hide","show","_hide","o","link","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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 = 1;\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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 enable(e) {\n if (e) { L.DomEvent.preventDefault(e); };\n if (e) { L.DomEvent.stopPropagation(e); };\n if (this._enabled) { return; };\n this._enabled = true;\n if (this.addHooks) { this.addHooks(); };\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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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];\n\nopacities = opacities.map((o) => {\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:' + o/100 + ';',\n },\n },\n addHooks() {\n console.log(this);\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nconsole.log(opacities);\n\nL.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","makeImageOpaque","makeImageTransparent","subToolbar","link","_hide","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/DistortableImage.Edit.js b/src/edit/DistortableImage.Edit.js index 6fa80dd80..9504908e0 100644 --- a/src/edit/DistortableImage.Edit.js +++ b/src/edit/DistortableImage.Edit.js @@ -14,6 +14,7 @@ L.DistortableImage.Edit = L.Handler.extend({ this._mode = overlay.options.mode; this._transparent = false; this._outlined = false; + this._opacity = 1; L.setOptions(this, options); @@ -32,7 +33,6 @@ L.DistortableImage.Edit = L.Handler.extend({ this._initHandles(); this._appendHandlesandDragable(); - if (overlay.isSelected() && !overlay.options.suppressToolbar) { this._addToolbar(); } @@ -340,18 +340,6 @@ L.DistortableImage.Edit = L.Handler.extend({ this.setMode('freeRotate'); }, - _opacitiesMode() { - this.setMode('opacities'); - }, - - _toggleOpacitiesMode() { - if (this.isMode('opacities')) { - this.setMode(''); - } else { - this._opacitiesMode(); - }; - }, - _toggleLockMode() { if (this.isMode('lock')) { this._unlock(); } else { this._lock(); } @@ -372,6 +360,20 @@ L.DistortableImage.Edit = L.Handler.extend({ this._refresh(); }, + _setOpacities(o) { + const image = this._overlay.getElement(); + let opacity = o; + + if (!this.hasTool(L.OpacitiesAction)) { return; } + + (this.opacity < 1) ? this._transparent = true : this._transparent = false; + + L.DomUtil.setOpacity(image, opacity); + image.setAttribute('opacity', opacity); + + this._refresh(); + }, + _toggleBorder() { const image = this._overlay.getElement(); let outline; diff --git a/src/edit/actions/EditAction.js b/src/edit/actions/EditAction.js index e1aefb612..b313242f5 100644 --- a/src/edit/actions/EditAction.js +++ b/src/edit/actions/EditAction.js @@ -23,10 +23,19 @@ L.EditAction = L.Toolbar2.Action.extend({ this._injectIconSet(); }, + enable(e) { + if (e) { L.DomEvent.preventDefault(e); }; + if (e) { L.DomEvent.stopPropagation(e); }; + if (this._enabled) { return; }; + this._enabled = true; + if (this.addHooks) { this.addHooks(); }; + }, + _createIcon(toolbar, container, args) { const iconOptions = this.options.toolbarIcon; const className = iconOptions.className; const edit = this._overlay.editing; + const style = this.options.toolbarIcon.style; this.toolbar = toolbar; this._icon = L.DomUtil.create('li', '', container); @@ -40,7 +49,7 @@ L.EditAction = L.Toolbar2.Action.extend({ this._link.setAttribute('href', '#'); this._link.setAttribute('title', iconOptions.tooltip); - if (iconOptions.style) { this._link.setAttribute('style', iconOptions.style); }; + if (style) { this._link.setAttribute('style', style); }; this._link.setAttribute('role', 'button'); L.DomUtil.addClass(this._link, this.constructor.baseClass); diff --git a/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index e657ef118..7c5289324 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -1,3 +1,24 @@ +let opacities = [100, 80, 60, 40, 20, 0]; + +opacities = opacities.map((o) => { + return L.EditAction.extend({ + options: { + toolbarIcon: { + html: '', + tooltip: 'Opacity ' + o +'%', + className: 'leaflet-toolbar-icon-vertical', + style: 'background-color:#000; opacity:' + o/100 + ';', + }, + }, + addHooks() { + console.log(this); + this._overlay.editing._setOpacities(o/100); + }, + }); +}); + +console.log(opacities); + L.OpacitiesAction = L.EditAction.extend({ initialize(map, overlay, options) { const edit = overlay.editing; @@ -18,145 +39,30 @@ L.OpacitiesAction = L.EditAction.extend({ svg: true, html: use, tooltip: tooltip, - className: mode === 'lock' ? 'disabled' : 'subtoolbar-enabled', + className: mode === 'lock' ? 'disabled' : '', }; - this.subToolBar = options.subToolbar = new L.Toolbar2({ - actions: [OpacitiesBar100, OpacitiesBar80, OpacitiesBar60, OpacitiesBar40, OpacitiesBar20, OpacitiesBar0, Cancel], + options.subToolbar = new L.Toolbar2({ + actions: opacities, }); - // L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; - // L.setOptions(this, options); + L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities'; + L.EditAction.prototype.initialize.call(this, map, overlay, options); }, addHooks() { - const edit = this._overlay.editing; - console.log(this.subToolBar); - console.log(this.subToolBar._ul.hidden); - console.log(edit); - console.log(edit.getModes()); - - if (this._overlay.isMode('opacities')) { - this.subToolBar.disable(); - this.subToolBar.hide(); + const link = this._link; + if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) { + L.DomUtil.removeClass(link, 'subtoolbar_enabled'); + setTimeout(() => { + this.options.subToolbar._hide(); + }, 100); } else { - this.subToolBar.enabled(); - this.subToolBar.show(); + L.DomUtil.addClass(link, 'subtoolbar_enabled'); }; - edit._toggleOpacitiesMode(); - - // const edit = this._overlay.editing; - // const link = this._link; - - // L.IconUtil.toggleXlink(link, 'opacities', 'opacity_empty'); - // L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); - // edit._toggleOpacity(); - }, -}); -const OpacitiesBar0 = L.EditAction.extend({ - options: { - toolbarIcon: { - html: '', - tooltip: 'Opacity 0%', - className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:0.01;', - }, - }, - addHooks: () => { - // this.map.setView([48.85815, 2.29420], 19); - // OpacitiesSubAction.prototype.addHooks.call(this); - }, -}); - -const OpacitiesBar20 = L.EditAction.extend({ - options: { - toolbarIcon: { - html: '', - tooltip: 'Opacity 20%', - className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:0.2;', - }, - }, - addHooks: () => { - // this.map.setView([48.85815, 2.29420], 19); - // OpacitiesSubAction.prototype.addHooks.call(this); - }, -}); - -const OpacitiesBar40 = L.EditAction.extend({ - options: { - toolbarIcon: { - html: '', - tooltip: 'Opacity 40%', - className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:0.4;', - }, - }, - addHooks: () => { - // this.map.setView([48.85815, 2.29420], 19); - // OpacitiesSubAction.prototype.addHooks.call(this); - }, -}); - -const OpacitiesBar60 = L.EditAction.extend({ - options: { - toolbarIcon: { - html: '', - tooltip: 'Opacity 60%', - className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:0.6;', - }, - }, - addHooks: () => { - // this.map.setView([48.85815, 2.29420], 19); - // OpacitiesSubAction.prototype.addHooks.call(this); - }, -}); - -const OpacitiesBar80 = L.EditAction.extend({ - options: { - toolbarIcon: { - html: '', - tooltip: 'Opacity 80%', - className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:0.8;', - }, - }, - addHooks: () => { - // this.map.setView([48.85815, 2.29420], 19); - // OpacitiesSubAction.prototype.addHooks.call(this); - }, -}); - -const OpacitiesBar100 = L.EditAction.extend({ - options: { - toolbarIcon: { - html: '', - tooltip: 'Opacity 100%', - className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:1;', - }, - }, - addHooks: () => { - // this.map.setView([48.85815, 2.29420], 19); - // OpacitiesSubAction.prototype.addHooks.call(this); - }, -}); - -const Cancel = L.EditAction.extend({ - options: { - toolbarIcon: { - html: '✖', - tooltip: 'Cancel', - className: 'leaflet-toolbar-icon-vertical', - style: 'font-size:1.25rem;', - }, - }, - - addHooks() { - this.disable(); - this.toolbar._hide(); + L.IconUtil.toggleXlink(link, 'opacities', 'cancel'); + L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel'); }, }); diff --git a/src/iconsets/ToolbarIconSet.js b/src/iconsets/ToolbarIconSet.js index c9404c5d2..83e4bc4fe 100644 --- a/src/iconsets/ToolbarIconSet.js +++ b/src/iconsets/ToolbarIconSet.js @@ -14,7 +14,7 @@ L.ToolbarIconSet = L.IconSet.extend({ '' + '' + '' + - '' + + '' + '' + '' + '' + From 890f48a9a825d20c95b0b6ebfd228f5edcdf10b0 Mon Sep 17 00:00:00 2001 From: themacboy Date: Mon, 24 Oct 2022 08:06:18 +0200 Subject: [PATCH 51/73] correct Opacities icon, incorrect change when OpacityAction is fired --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 16 ++-------------- 3 files changed, 4 insertions(+), 16 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 43ef4cd4f..e52ce5ce3 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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()},enable:function(t){t&&L.DomEvent.preventDefault(t),t&&L.DomEvent.stopPropagation(t),this._enabled||(this._enabled=!0,this.addHooks&&this.addHooks())},_createIcon:function(t,e,i){var o=this,n=this.options.toolbarIcon,a=n.className,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];t=t.map((function(t){return L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity "+t+"%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:"+t/100+";"}},addHooks:function(){console.log(this),this._overlay.editing._setOpacities(t/100)}})})),console.log(t),L.OpacitiesAction=L.EditAction.extend({initialize:function(e,i,o){var n,a,s=i.editing,r=s._mode;s._transparent?(n="opacity_empty",a=i.options.translation.makeImageOpaque):(n="opacities",a=i.options.translation.makeImageTransparent),(o=o||{}).toolbarIcon={svg:!0,html:n,tooltip:a,className:"lock"===r?"disabled":""},o.subToolbar=new L.Toolbar2({actions:t}),L.DistortableImage.action_map.o="lock"===r?"":"_toggleOpacities",L.EditAction.prototype.initialize.call(this,e,i,o)},addHooks:function(){var t=this,e=this._link;L.DomUtil.hasClass(e,"subtoolbar_enabled")?(L.DomUtil.removeClass(e,"subtoolbar_enabled"),setTimeout((function(){t.options.subToolbar._hide()}),100)):L.DomUtil.addClass(e,"subtoolbar_enabled"),L.IconUtil.toggleXlink(e,"opacities","cancel"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Cancel")}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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()},enable:function(t){t&&L.DomEvent.preventDefault(t),t&&L.DomEvent.stopPropagation(t),this._enabled||(this._enabled=!0,this.addHooks&&this.addHooks())},_createIcon:function(t,e,i){var o=this,n=this.options.toolbarIcon,a=n.className,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];t=t.map((function(t){return L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity "+t+"%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:"+t/100+";"}},addHooks:function(){console.log(this),this._overlay.editing._setOpacities(t/100)}})})),L.OpacitiesAction=L.EditAction.extend({initialize:function(e,i,o){var n=i.editing._mode;(o=o||{}).toolbarIcon={svg:!0,html:"opacities",tooltip:"Set custom opacity",className:"lock"===n?"disabled":""},o.subToolbar=new L.Toolbar2({actions:t}),L.DistortableImage.action_map.o="lock"===n?"":"_toggleOpacities",L.EditAction.prototype.initialize.call(this,e,i,o)},addHooks:function(){var t=this,e=this._link;L.DomUtil.hasClass(e,"subtoolbar_enabled")?(L.DomUtil.removeClass(e,"subtoolbar_enabled"),setTimeout((function(){t.options.subToolbar._hide()}),100)):L.DomUtil.addClass(e,"subtoolbar_enabled"),L.IconUtil.toggleXlink(e,"opacities","cancel"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Cancel")}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 856487cdc..3a309b73a 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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 = 1;\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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 enable(e) {\n if (e) { L.DomEvent.preventDefault(e); };\n if (e) { L.DomEvent.stopPropagation(e); };\n if (this._enabled) { return; };\n this._enabled = true;\n if (this.addHooks) { this.addHooks(); };\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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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];\n\nopacities = opacities.map((o) => {\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:' + o/100 + ';',\n },\n },\n addHooks() {\n console.log(this);\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nconsole.log(opacities);\n\nL.OpacitiesAction = 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 = 'opacities';\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 options.subToolbar = new L.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","makeImageOpaque","makeImageTransparent","subToolbar","link","_hide","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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 = 1;\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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 enable(e) {\n if (e) { L.DomEvent.preventDefault(e); };\n if (e) { L.DomEvent.stopPropagation(e); };\n if (this._enabled) { return; };\n this._enabled = true;\n if (this.addHooks) { this.addHooks(); };\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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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];\n\nopacities = opacities.map((o) => {\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:' + o/100 + ';',\n },\n },\n addHooks() {\n console.log(this);\n this._overlay.editing._setOpacities(o/100);\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.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 7c5289324..b0300caab 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -17,28 +17,16 @@ opacities = opacities.map((o) => { }); }); -console.log(opacities); - L.OpacitiesAction = L.EditAction.extend({ initialize(map, overlay, options) { const edit = overlay.editing; const mode = edit._mode; - let use; - let tooltip; - - if (edit._transparent) { - use = 'opacity_empty'; - tooltip = overlay.options.translation.makeImageOpaque; - } else { - use = 'opacities'; - tooltip = overlay.options.translation.makeImageTransparent; - } options = options || {}; options.toolbarIcon = { svg: true, - html: use, - tooltip: tooltip, + html: 'opacities', + tooltip: 'Set custom opacity', className: mode === 'lock' ? 'disabled' : '', }; From 5bd0024d95eaf26f399e9d72238001b92f5f5904 Mon Sep 17 00:00:00 2001 From: themacboy Date: Mon, 24 Oct 2022 08:07:26 +0200 Subject: [PATCH 52/73] add comment in OpacitiesAction --- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/leaflet.distortableimage.js.map b/dist/leaflet.distortableimage.js.map index 3a309b73a..015c0b1c5 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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 = 1;\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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 enable(e) {\n if (e) { L.DomEvent.preventDefault(e); };\n if (e) { L.DomEvent.stopPropagation(e); };\n if (this._enabled) { return; };\n this._enabled = true;\n if (this.addHooks) { this.addHooks(); };\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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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];\n\nopacities = opacities.map((o) => {\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:' + o/100 + ';',\n },\n },\n addHooks() {\n console.log(this);\n this._overlay.editing._setOpacities(o/100);\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.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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 = 1;\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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 enable(e) {\n if (e) { L.DomEvent.preventDefault(e); };\n if (e) { L.DomEvent.stopPropagation(e); };\n if (this._enabled) { return; };\n this._enabled = true;\n if (this.addHooks) { this.addHooks(); };\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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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 integer values from 0 to 100.\n\nopacities = opacities.map((o) => {\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:' + o/100 + ';',\n },\n },\n addHooks() {\n console.log(this);\n this._overlay.editing._setOpacities(o/100);\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.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index b0300caab..613e9e737 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -1,4 +1,4 @@ -let opacities = [100, 80, 60, 40, 20, 0]; +let opacities = [100, 80, 60, 40, 20, 0]; // Set integer values from 0 to 100. opacities = opacities.map((o) => { return L.EditAction.extend({ From d32e44353c62e49aa6590a11e85921a62e6adfb2 Mon Sep 17 00:00:00 2001 From: themacboy Date: Mon, 24 Oct 2022 08:23:10 +0200 Subject: [PATCH 53/73] correct undesired values in opacities array --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index e52ce5ce3..6b308ffcd 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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()},enable:function(t){t&&L.DomEvent.preventDefault(t),t&&L.DomEvent.stopPropagation(t),this._enabled||(this._enabled=!0,this.addHooks&&this.addHooks())},_createIcon:function(t,e,i){var o=this,n=this.options.toolbarIcon,a=n.className,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];t=t.map((function(t){return L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity "+t+"%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:"+t/100+";"}},addHooks:function(){console.log(this),this._overlay.editing._setOpacities(t/100)}})})),L.OpacitiesAction=L.EditAction.extend({initialize:function(e,i,o){var n=i.editing._mode;(o=o||{}).toolbarIcon={svg:!0,html:"opacities",tooltip:"Set custom opacity",className:"lock"===n?"disabled":""},o.subToolbar=new L.Toolbar2({actions:t}),L.DistortableImage.action_map.o="lock"===n?"":"_toggleOpacities",L.EditAction.prototype.initialize.call(this,e,i,o)},addHooks:function(){var t=this,e=this._link;L.DomUtil.hasClass(e,"subtoolbar_enabled")?(L.DomUtil.removeClass(e,"subtoolbar_enabled"),setTimeout((function(){t.options.subToolbar._hide()}),100)):L.DomUtil.addClass(e,"subtoolbar_enabled"),L.IconUtil.toggleXlink(e,"opacities","cancel"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Cancel")}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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()},enable:function(t){t&&L.DomEvent.preventDefault(t),t&&L.DomEvent.stopPropagation(t),this._enabled||(this._enabled=!0,this.addHooks&&this.addHooks())},_createIcon:function(t,e,i){var o=this,n=this.options.toolbarIcon,a=n.className,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];t=t.map((function(t){return(isNaN(t)||t>100)&&(t=100),t<0&&(t=0),L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity "+t+"%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:"+t/100+";"}},addHooks:function(){this._overlay.editing._setOpacities(t/100)}})})),console.log(t),L.OpacitiesAction=L.EditAction.extend({initialize:function(e,i,o){var n=i.editing._mode;(o=o||{}).toolbarIcon={svg:!0,html:"opacities",tooltip:"Set custom opacity",className:"lock"===n?"disabled":""},o.subToolbar=new L.Toolbar2({actions:t}),L.DistortableImage.action_map.o="lock"===n?"":"_toggleOpacities",L.EditAction.prototype.initialize.call(this,e,i,o)},addHooks:function(){var t=this,e=this._link;L.DomUtil.hasClass(e,"subtoolbar_enabled")?(L.DomUtil.removeClass(e,"subtoolbar_enabled"),setTimeout((function(){t.options.subToolbar._hide()}),100)):L.DomUtil.addClass(e,"subtoolbar_enabled"),L.IconUtil.toggleXlink(e,"opacities","cancel"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Cancel")}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 015c0b1c5..2c52afd54 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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 = 1;\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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 enable(e) {\n if (e) { L.DomEvent.preventDefault(e); };\n if (e) { L.DomEvent.stopPropagation(e); };\n if (this._enabled) { return; };\n this._enabled = true;\n if (this.addHooks) { this.addHooks(); };\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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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 integer values from 0 to 100.\n\nopacities = opacities.map((o) => {\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: '',\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:' + o/100 + ';',\n },\n },\n addHooks() {\n console.log(this);\n this._overlay.editing._setOpacities(o/100);\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.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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 = 1;\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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 enable(e) {\n if (e) { L.DomEvent.preventDefault(e); };\n if (e) { L.DomEvent.stopPropagation(e); };\n if (this._enabled) { return; };\n this._enabled = true;\n if (this.addHooks) { this.addHooks(); };\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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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\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: '',\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:' + o/100 + ';',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nconsole.log(opacities);\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.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","isNaN","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 613e9e737..280a4f835 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -1,6 +1,9 @@ -let opacities = [100, 80, 60, 40, 20, 0]; // Set integer values from 0 to 100. +let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100. opacities = opacities.map((o) => { + (isNaN(o) || o > 100) ? o = 100 : o; + (o < 0) ? o = 0 : o; + return L.EditAction.extend({ options: { toolbarIcon: { @@ -11,12 +14,13 @@ opacities = opacities.map((o) => { }, }, addHooks() { - console.log(this); this._overlay.editing._setOpacities(o/100); }, }); }); +console.log(opacities); + L.OpacitiesAction = L.EditAction.extend({ initialize(map, overlay, options) { const edit = overlay.editing; From 8a7f2250e7dfe00e275affff08214480c7d30392 Mon Sep 17 00:00:00 2001 From: themacboy Date: Tue, 25 Oct 2022 08:12:01 +0200 Subject: [PATCH 54/73] =?UTF-8?q?millorar=20aplicaci=C3=B3=20dels=20style?= =?UTF-8?q?=20al=20sub-toolbar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/leaflet.distortableimage.css | 4 ++-- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 52c7b9ad7..43f426bef 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -234,11 +234,11 @@ a.leaflet-toolbar-icon[title='Loading...'] { font-weight: bold !important; float: none !important; margin: auto !important; + opacity:0; } -.leaflet-toolbar-1 { +.leaflet-toolbar-1 li:last-child a { border-radius: 0px 0px 4px 4px !important; - background-color: #fff !important; } input[type="text"]::-webkit-input-placeholder { diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 6b308ffcd..1b023833a 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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()},enable:function(t){t&&L.DomEvent.preventDefault(t),t&&L.DomEvent.stopPropagation(t),this._enabled||(this._enabled=!0,this.addHooks&&this.addHooks())},_createIcon:function(t,e,i){var o=this,n=this.options.toolbarIcon,a=n.className,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];t=t.map((function(t){return(isNaN(t)||t>100)&&(t=100),t<0&&(t=0),L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity "+t+"%",className:"leaflet-toolbar-icon-vertical",style:"background-color:#000; opacity:"+t/100+";"}},addHooks:function(){this._overlay.editing._setOpacities(t/100)}})})),console.log(t),L.OpacitiesAction=L.EditAction.extend({initialize:function(e,i,o){var n=i.editing._mode;(o=o||{}).toolbarIcon={svg:!0,html:"opacities",tooltip:"Set custom opacity",className:"lock"===n?"disabled":""},o.subToolbar=new L.Toolbar2({actions:t}),L.DistortableImage.action_map.o="lock"===n?"":"_toggleOpacities",L.EditAction.prototype.initialize.call(this,e,i,o)},addHooks:function(){var t=this,e=this._link;L.DomUtil.hasClass(e,"subtoolbar_enabled")?(L.DomUtil.removeClass(e,"subtoolbar_enabled"),setTimeout((function(){t.options.subToolbar._hide()}),100)):L.DomUtil.addClass(e,"subtoolbar_enabled"),L.IconUtil.toggleXlink(e,"opacities","cancel"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Cancel")}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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()},enable:function(t){t&&L.DomEvent.preventDefault(t),t&&L.DomEvent.stopPropagation(t),this._enabled||(this._enabled=!0,this.addHooks&&this.addHooks())},_createIcon:function(t,e,i){var o=this,n=this.options.toolbarIcon,a=n.className,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];t=t.map((function(t){return(isNaN(t)||t>100)&&(t=100),t<0&&(t=0),L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity "+t+"%",className:"leaflet-toolbar-icon-vertical",style:"color:#000; background-color:rgb("+(100-t)+"%,"+(100-t)+"%,"+(100-t)+"%); opacity:1;"}},addHooks:function(){this._overlay.editing._setOpacities(t/100)}})})),console.log(t),L.OpacitiesAction=L.EditAction.extend({initialize:function(e,i,o){var n=i.editing._mode;(o=o||{}).toolbarIcon={svg:!0,html:"opacities",tooltip:"Set custom opacity",className:"lock"===n?"disabled":""},o.subToolbar=new L.Toolbar2({actions:t}),L.DistortableImage.action_map.o="lock"===n?"":"_toggleOpacities",L.EditAction.prototype.initialize.call(this,e,i,o)},addHooks:function(){var t=this,e=this._link;L.DomUtil.hasClass(e,"subtoolbar_enabled")?(L.DomUtil.removeClass(e,"subtoolbar_enabled"),setTimeout((function(){t.options.subToolbar._hide()}),100)):L.DomUtil.addClass(e,"subtoolbar_enabled"),L.IconUtil.toggleXlink(e,"opacities","cancel"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Cancel")}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 2c52afd54..7708ef6dc 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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 = 1;\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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 enable(e) {\n if (e) { L.DomEvent.preventDefault(e); };\n if (e) { L.DomEvent.stopPropagation(e); };\n if (this._enabled) { return; };\n this._enabled = true;\n if (this.addHooks) { this.addHooks(); };\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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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\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: '',\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:#000; opacity:' + o/100 + ';',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nconsole.log(opacities);\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.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","isNaN","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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 = 1;\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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 enable(e) {\n if (e) { L.DomEvent.preventDefault(e); };\n if (e) { L.DomEvent.stopPropagation(e); };\n if (this._enabled) { return; };\n this._enabled = true;\n if (this.addHooks) { this.addHooks(); };\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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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\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: '',\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'color:#000; background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%); opacity:1;',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nconsole.log(opacities);\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.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","isNaN","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 280a4f835..3523f8513 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -10,7 +10,7 @@ opacities = opacities.map((o) => { html: '', tooltip: 'Opacity ' + o +'%', className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:#000; opacity:' + o/100 + ';', + style: 'color:#000; background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%); opacity:1;', }, }, addHooks() { From 0c2607b0a2f994f578cc5f2bf8a51eae705b2187 Mon Sep 17 00:00:00 2001 From: themacboy Date: Tue, 25 Oct 2022 08:18:41 +0200 Subject: [PATCH 55/73] ajust css text sub-toolbar --- dist/leaflet.distortableimage.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 43f426bef..8923faaab 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -226,15 +226,16 @@ a.leaflet-toolbar-icon[title='Loading...'] { width: 30px !important; height: 30px !important; line-height: 30px !important; - padding-right: 0 !important; + padding: 0 !important; text-align: center !important; text-decoration: none !important; background-color: #fff; border: inset 0.5px lightgray !important; + font-size: 12px !important; font-weight: bold !important; + color:#0087A8 !important; float: none !important; margin: auto !important; - opacity:0; } .leaflet-toolbar-1 li:last-child a { From a407052c8beec9e5513f0f29f778fc9fd7cfbbc1 Mon Sep 17 00:00:00 2001 From: themacboy Date: Tue, 25 Oct 2022 08:19:00 +0200 Subject: [PATCH 56/73] ajust css text sub-toolbar --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 1b023833a..0bb343e3b 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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()},enable:function(t){t&&L.DomEvent.preventDefault(t),t&&L.DomEvent.stopPropagation(t),this._enabled||(this._enabled=!0,this.addHooks&&this.addHooks())},_createIcon:function(t,e,i){var o=this,n=this.options.toolbarIcon,a=n.className,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];t=t.map((function(t){return(isNaN(t)||t>100)&&(t=100),t<0&&(t=0),L.EditAction.extend({options:{toolbarIcon:{html:"",tooltip:"Opacity "+t+"%",className:"leaflet-toolbar-icon-vertical",style:"color:#000; background-color:rgb("+(100-t)+"%,"+(100-t)+"%,"+(100-t)+"%); opacity:1;"}},addHooks:function(){this._overlay.editing._setOpacities(t/100)}})})),console.log(t),L.OpacitiesAction=L.EditAction.extend({initialize:function(e,i,o){var n=i.editing._mode;(o=o||{}).toolbarIcon={svg:!0,html:"opacities",tooltip:"Set custom opacity",className:"lock"===n?"disabled":""},o.subToolbar=new L.Toolbar2({actions:t}),L.DistortableImage.action_map.o="lock"===n?"":"_toggleOpacities",L.EditAction.prototype.initialize.call(this,e,i,o)},addHooks:function(){var t=this,e=this._link;L.DomUtil.hasClass(e,"subtoolbar_enabled")?(L.DomUtil.removeClass(e,"subtoolbar_enabled"),setTimeout((function(){t.options.subToolbar._hide()}),100)):L.DomUtil.addClass(e,"subtoolbar_enabled"),L.IconUtil.toggleXlink(e,"opacities","cancel"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Cancel")}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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?"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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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()},enable:function(t){t&&L.DomEvent.preventDefault(t),t&&L.DomEvent.stopPropagation(t),this._enabled||(this._enabled=!0,this.addHooks&&this.addHooks())},_createIcon:function(t,e,i){var o=this,n=this.options.toolbarIcon,a=n.className,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];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)}})})),console.log(t),L.OpacitiesAction=L.EditAction.extend({initialize:function(e,i,o){var n=i.editing._mode;(o=o||{}).toolbarIcon={svg:!0,html:"opacities",tooltip:"Set custom opacity",className:"lock"===n?"disabled":""},o.subToolbar=new L.Toolbar2({actions:t}),L.DistortableImage.action_map.o="lock"===n?"":"_toggleOpacities",L.EditAction.prototype.initialize.call(this,e,i,o)},addHooks:function(){var t=this,e=this._link;L.DomUtil.hasClass(e,"subtoolbar_enabled")?(L.DomUtil.removeClass(e,"subtoolbar_enabled"),setTimeout((function(){t.options.subToolbar._hide()}),100)):L.DomUtil.addClass(e,"subtoolbar_enabled"),L.IconUtil.toggleXlink(e,"opacities","cancel"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Cancel")}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 7708ef6dc..0ee5bdfb4 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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 = 1;\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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 enable(e) {\n if (e) { L.DomEvent.preventDefault(e); };\n if (e) { L.DomEvent.stopPropagation(e); };\n if (this._enabled) { return; };\n this._enabled = true;\n if (this.addHooks) { this.addHooks(); };\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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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\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: '',\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'color:#000; background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%); opacity:1;',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nconsole.log(opacities);\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.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","isNaN","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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 = 1;\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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 enable(e) {\n if (e) { L.DomEvent.preventDefault(e); };\n if (e) { L.DomEvent.stopPropagation(e); };\n if (this._enabled) { return; };\n this._enabled = true;\n if (this.addHooks) { this.addHooks(); };\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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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\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\nconsole.log(opacities);\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.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","isNaN","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 3523f8513..2fef350a0 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -7,10 +7,10 @@ opacities = opacities.map((o) => { return L.EditAction.extend({ options: { toolbarIcon: { - html: '', + html: o, tooltip: 'Opacity ' + o +'%', className: 'leaflet-toolbar-icon-vertical', - style: 'color:#000; background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%); opacity:1;', + style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);', }, }, addHooks() { From 0e8fe8e78fc253b9b0f6f05293d8d59b545c0e25 Mon Sep 17 00:00:00 2001 From: themacboy Date: Tue, 25 Oct 2022 08:29:39 +0200 Subject: [PATCH 57/73] bug event propagation increase sub-toolbar z-index --- dist/leaflet.distortableimage.css | 1 + 1 file changed, 1 insertion(+) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 8923faaab..70ab3a1d1 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -236,6 +236,7 @@ a.leaflet-toolbar-icon[title='Loading...'] { color:#0087A8 !important; float: none !important; margin: auto !important; + z-index:999; } .leaflet-toolbar-1 li:last-child a { From 5f776eef65646556fada1e7680fed6eed688ba16 Mon Sep 17 00:00:00 2001 From: themacboy Date: Tue, 25 Oct 2022 09:11:07 +0200 Subject: [PATCH 58/73] re-build after merge for Opacities activation --- dist/leaflet.distortableimage.js | 8292 +------------------------- dist/leaflet.distortableimage.js.map | 2 +- 2 files changed, 2 insertions(+), 8292 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 74f79597c..bfa0314f3 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,8292 +1,2 @@ -/******/ (function() { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "./node_modules/ansi-html-community/index.js": -/*!***************************************************!*\ - !*** ./node_modules/ansi-html-community/index.js ***! - \***************************************************/ -/***/ (function(module) { - -"use strict"; - - -module.exports = ansiHTML - -// Reference to https://github.com/sindresorhus/ansi-regex -var _regANSI = /(?:(?:\u001b\[)|\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\u001b[A-M]/ - -var _defColors = { - reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR] - black: '000', - red: 'ff0000', - green: '209805', - yellow: 'e8bf03', - blue: '0000ff', - magenta: 'ff00ff', - cyan: '00ffee', - lightgrey: 'f0f0f0', - darkgrey: '888' -} -var _styles = { - 30: 'black', - 31: 'red', - 32: 'green', - 33: 'yellow', - 34: 'blue', - 35: 'magenta', - 36: 'cyan', - 37: 'lightgrey' -} -var _openTags = { - '1': 'font-weight:bold', // bold - '2': 'opacity:0.5', // dim - '3': '', // italic - '4': '', // underscore - '8': 'display:none', // hidden - '9': '' // delete -} -var _closeTags = { - '23': '', // reset italic - '24': '', // reset underscore - '29': '' // reset delete -} - -;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) { - _closeTags[n] = '' -}) - -/** - * Converts text with ANSI color codes to HTML markup. - * @param {String} text - * @returns {*} - */ -function ansiHTML (text) { - // Returns the text if the string has no ANSI escape code. - if (!_regANSI.test(text)) { - return text - } - - // Cache opened sequence. - var ansiCodes = [] - // Replace with markup. - var ret = text.replace(/\033\[(\d+)m/g, function (match, seq) { - var ot = _openTags[seq] - if (ot) { - // If current sequence has been opened, close it. - if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast - ansiCodes.pop() - return '' - } - // Open tag. - ansiCodes.push(seq) - return ot[0] === '<' ? ot : '' - } - - var ct = _closeTags[seq] - if (ct) { - // Pop sequence - ansiCodes.pop() - return ct - } - return '' - }) - - // Make sure tags are closed. - var l = ansiCodes.length - ;(l > 0) && (ret += Array(l + 1).join('')) - - return ret -} - -/** - * Customize colors. - * @param {Object} colors reference to _defColors - */ -ansiHTML.setColors = function (colors) { - if (typeof colors !== 'object') { - throw new Error('`colors` parameter must be an Object.') - } - - var _finalColors = {} - for (var key in _defColors) { - var hex = colors.hasOwnProperty(key) ? colors[key] : null - if (!hex) { - _finalColors[key] = _defColors[key] - continue - } - if ('reset' === key) { - if (typeof hex === 'string') { - hex = [hex] - } - if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) { - return typeof h !== 'string' - })) { - throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000') - } - var defHexColor = _defColors[key] - if (!hex[0]) { - hex[0] = defHexColor[0] - } - if (hex.length === 1 || !hex[1]) { - hex = [hex[0]] - hex.push(defHexColor[1]) - } - - hex = hex.slice(0, 2) - } else if (typeof hex !== 'string') { - throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000') - } - _finalColors[key] = hex - } - _setTags(_finalColors) -} - -/** - * Reset colors. - */ -ansiHTML.reset = function () { - _setTags(_defColors) -} - -/** - * Expose tags, including open and close. - * @type {Object} - */ -ansiHTML.tags = {} - -if (Object.defineProperty) { - Object.defineProperty(ansiHTML.tags, 'open', { - get: function () { return _openTags } - }) - Object.defineProperty(ansiHTML.tags, 'close', { - get: function () { return _closeTags } - }) -} else { - ansiHTML.tags.open = _openTags - ansiHTML.tags.close = _closeTags -} - -function _setTags (colors) { - // reset all - _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1] - // inverse - _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0] - // dark grey - _openTags['90'] = 'color:#' + colors.darkgrey - - for (var code in _styles) { - var color = _styles[code] - var oriColor = colors[color] || '000' - _openTags[code] = 'color:#' + oriColor - code = parseInt(code) - _openTags[(code + 10).toString()] = 'background:#' + oriColor - } -} - -ansiHTML.reset() - - -/***/ }), - -/***/ "./src/DistortableCollection.js": -/*!**************************************!*\ - !*** ./src/DistortableCollection.js ***! - \**************************************/ -/***/ (function() { - -L.DistortableCollection = L.FeatureGroup.extend({ - options: { - editable: true, - exportOpts: { - exportStartUrl: '//export.mapknitter.org/export', - statusUrl: '//export.mapknitter.org', - exportUrl: 'http://export.mapknitter.org/' - } - }, - initialize: function initialize(options) { - L.setOptions(this, options); - L.FeatureGroup.prototype.initialize.call(this, options); - L.Utils.initTranslation.call(this); - this.editable = this.options.editable; - }, - onAdd: function onAdd(map) { - L.FeatureGroup.prototype.onAdd.call(this, map); - this._map = map; - - if (this.editable) { - this.editing.enable(); - } - /** - * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable, - * events that need to be added on individual images are kept here to do so through `layeradd`. - */ - - - this.on('layeradd', this._addEvents, this); - this.on('layerremove', this._removeEvents, this); - }, - onRemove: function onRemove() { - if (this.editing) { - this.editing.disable(); - } - - this.off('layeradd', this._addEvents, this); - this.off('layerremove', this._removeEvents, this); - }, - _addEvents: function _addEvents(e) { - var layer = e.layer; - L.DomEvent.on(layer, { - dragstart: this._dragStartMultiple, - drag: this._dragMultiple - }, this); - L.DomEvent.on(layer.getElement(), { - mousedown: this._deselectOthers, - - /* Enable longpress for multi select for touch devices. */ - contextmenu: this._longPressMultiSelect - }, this); - }, - _removeEvents: function _removeEvents(e) { - var layer = e.layer; - L.DomEvent.off(layer, { - dragstart: this._dragStartMultiple, - drag: this._dragMultiple - }, this); - L.DomEvent.off(layer.getElement(), { - mousedown: this._deselectOthers, - contextmenu: this._longPressMultiSelect - }, this); - }, - _longPressMultiSelect: function _longPressMultiSelect(e) { - var _this = this; - - if (!this.editable) { - return; - } - - e.preventDefault(); - this.eachLayer(function (layer) { - var edit = layer.editing; - - if (layer.getElement() === e.target && edit.enabled()) { - L.DomUtil.toggleClass(layer.getElement(), 'collected'); - - if (_this.anyCollected()) { - layer.deselect(); - - _this.editing._addToolbar(); - } else { - _this.editing._removeToolbar(); - } - } - }); - }, - isCollected: function isCollected(overlay) { - return L.DomUtil.hasClass(overlay.getElement(), 'collected'); - }, - anyCollected: function anyCollected() { - var layerArr = this.getLayers(); - return layerArr.some(this.isCollected.bind(this)); - }, - _toggleCollected: function _toggleCollected(e, layer) { - if (e.shiftKey) { - /* conditional prevents disabled images from flickering multi-select mode */ - if (layer.editing.enabled()) { - L.DomUtil.toggleClass(e.target, 'collected'); - } - } - - if (this.anyCollected()) { - layer.deselect(); - } else { - this.editing._removeToolbar(); - } - }, - _deselectOthers: function _deselectOthers(e) { - var _this2 = this; - - if (!this.editable) { - return; - } - - this.eachLayer(function (layer) { - if (layer.getElement() !== e.target) { - layer.deselect(); - } else { - _this2._toggleCollected(e, layer); - } - }); - - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - _dragStartMultiple: function _dragStartMultiple(e) { - var overlay = e.target; - var map = this._map; - var i; - - if (!this.isCollected(overlay)) { - return; - } - - this.eachLayer(function (layer) { - layer._dragStartPoints = {}; - layer.deselect(); - - for (i = 0; i < 4; i++) { - var c = layer.getCorner(i); - layer._dragStartPoints[i] = map.latLngToLayerPoint(c); - } - }); - }, - _dragMultiple: function _dragMultiple(e) { - var overlay = e.target; - var map = this._map; - - if (!this.isCollected(overlay)) { - return; - } - - var topLeft = map.latLngToLayerPoint(overlay.getCorner(0)); - - var delta = overlay._dragStartPoints[0].subtract(topLeft); - - this._updateCollectionFromPoints(delta, overlay); - }, - _toRemove: function _toRemove() { - var _this3 = this; - - var layerArr = this.getLayers(); - return layerArr.filter(function (layer) { - var mode = layer.editing._mode; - return _this3.isCollected(layer) && mode !== 'lock'; - }); - }, - _toMove: function _toMove(overlay) { - var _this4 = this; - - var layerArr = this.getLayers(); - return layerArr.filter(function (layer) { - var mode = layer.editing._mode; - return layer !== overlay && _this4.isCollected(layer) && mode !== 'lock'; - }); - }, - _updateCollectionFromPoints: function _updateCollectionFromPoints(delta, overlay) { - var layersToMove = this._toMove(overlay); - - var p = new L.Transformation(1, -delta.x, 1, -delta.y); - var i; - layersToMove.forEach(function (layer) { - var movedPoints = {}; - - for (i = 0; i < 4; i++) { - movedPoints[i] = p.transform(layer._dragStartPoints[i]); - } - - layer.setCornersFromPoints(movedPoints); - }); - }, - _getAvgCmPerPixel: function _getAvgCmPerPixel(imgs) { - var reduce = imgs.reduce(function (sum, img) { - return sum + img.cm_per_pixel; - }, 0); - return reduce / imgs.length; - }, - generateExportJson: function generateExportJson() { - var json = {}; - json.images = []; - this.eachLayer(function (layer) { - if (this.isCollected(layer)) { - var sections = layer._image.src.split('/'); - - var filename = sections[sections.length - 1]; - var zc = layer.getCorners(); - var corners = [{ - lat: zc[0].lat, - lon: zc[0].lng - }, { - lat: zc[1].lat, - lon: zc[1].lng - }, { - lat: zc[3].lat, - lon: zc[3].lng - }, { - lat: zc[2].lat, - lon: zc[2].lng - }]; - json.images.push({ - id: this.getLayerId(layer), - src: layer._image.src, - width: layer._image.width, - height: layer._image.height, - image_file_name: filename, - nodes: corners, - cm_per_pixel: L.ImageUtil.getCmPerPixel(layer) - }); - } - }, this); - json.images = json.images.reverse(); - json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images); - return json; - } -}); - -L.distortableCollection = function (id, options) { - return new L.DistortableCollection(id, options); -}; - -/***/ }), - -/***/ "./src/DistortableImageOverlay.js": -/*!****************************************!*\ - !*** ./src/DistortableImageOverlay.js ***! - \****************************************/ -/***/ (function() { - -L.DistortableImageOverlay = L.ImageOverlay.extend({ - options: { - height: 200, - crossOrigin: true, - // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding) - edgeMinWidth: 50, - editable: true, - mode: 'distort', - selected: false - }, - initialize: function initialize(url, options) { - L.setOptions(this, options); - L.Utils.initTranslation.call(this); - this.edgeMinWidth = this.options.edgeMinWidth; - this.editable = this.options.editable; - this._selected = this.options.selected; - this._url = url; - this.rotation = {}; - }, - onAdd: function onAdd(map) { - var _this = this; - - this._map = map; - - if (!this.getElement()) { - this._initImage(); - } - - map.on('viewreset', this._reset, this); - - if (this.options.corners) { - this._corners = this.options.corners; - - if (map.options.zoomAnimation && L.Browser.any3d) { - map.on('zoomanim', this._animateZoom, this); - } - } // Have to wait for the image to load because need to access its w/h - - - L.DomEvent.on(this.getElement(), 'load', function () { - _this.getPane().appendChild(_this.getElement()); - - _this._initImageDimensions(); - - if (_this.options.rotation) { - var units = _this.options.rotation.deg ? 'deg' : 'rad'; - - _this.setAngle(_this.options.rotation[units], units); - } else { - _this.rotation = { - deg: 0, - rad: 0 - }; - - _this._reset(); - } - /* Initialize default corners if not already set */ - - - if (!_this._corners) { - if (map.options.zoomAnimation && L.Browser.any3d) { - map.on('zoomanim', _this._animateZoom, _this); - } - } - /** if there is a featureGroup, only its editable option matters */ - - - var eventParents = _this._eventParents; - - if (eventParents) { - _this.eP = eventParents[Object.keys(eventParents)[0]]; - - if (_this.eP.editable) { - _this.editing.enable(); - } - } else { - if (_this.editable) { - _this.editing.enable(); - } - - _this.eP = null; - } - }); - L.DomEvent.on(this.getElement(), 'click', this.select, this); - L.DomEvent.on(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick - }, this); - /** - * custom events fired from DoubleClickLabels.js. Used to differentiate - * single / dblclick to not deselect images on map dblclick. - */ - - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.on(map, 'click', this.deselect, this); - } - - this.fire('add'); - }, - onRemove: function onRemove(map) { - L.DomEvent.off(this.getElement(), 'click', this.select, this); - L.DomEvent.off(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick - }, this); - L.DomEvent.off(map, 'click', this.deselect, this); - - if (this.editing) { - this.editing.disable(); - } - - this.fire('remove'); - L.ImageOverlay.prototype.onRemove.call(this, map); - }, - _initImageDimensions: function _initImageDimensions() { - var map = this._map; - var originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width'); - var originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height'); - var aspectRatio = parseInt(originalImageWidth) / parseInt(originalImageHeight); - var imageHeight = this.options.height; - var imageWidth = parseInt(aspectRatio * imageHeight); - var center = map.project(map.getCenter()); - var offset = L.point(imageWidth, imageHeight).divideBy(2); - - if (this.options.corners) { - this._corners = this.options.corners; - } else { - this._corners = [map.unproject(center.subtract(offset)), map.unproject(center.add(L.point(offset.x, -offset.y))), map.unproject(center.add(L.point(-offset.x, offset.y))), map.unproject(center.add(offset))]; - } - - this._initialDimensions = { - 'center': center, - 'offset': offset, - 'zoom': map.getZoom() - }; - this.setBounds(L.latLngBounds(this.getCorners())); - }, - _singleClick: function _singleClick(e) { - if (e.type === 'singleclick') { - this.deselect(); - } else { - return; - } - }, - _singleClickListeners: function _singleClickListeners() { - var map = this._map; - L.DomEvent.off(map, 'click', this.deselect, this); - L.DomEvent.on(map, 'singleclick', this.deselect, this); - }, - _resetClickListeners: function _resetClickListeners() { - var map = this._map; - L.DomEvent.on(map, 'click', this.deselect, this); - L.DomEvent.off(map, 'singleclick', this.deselect, this); - }, - isSelected: function isSelected() { - return this._selected; - }, - deselect: function deselect() { - var edit = this.editing; - - if (!edit.enabled()) { - return; - } - - edit._removeToolbar(); - - edit._hideMarkers(); - - this._selected = false; - this.fire('deselect'); - return this; - }, - select: function select(e) { - var edit = this.editing; - var eP = this.eP; - - if (!edit.enabled()) { - return; - } - - if (e) { - L.DomEvent.stopPropagation(e); - } // this ensures deselection of all other images, allowing us to keep collection group optional - - - this._programmaticGrouping(); - - this._selected = true; - - edit._addToolbar(); - - edit._showMarkers(); - - this.fire('select'); // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it - - if (eP && eP.anyCollected()) { - this.deselect(); - return; - } - - return this; - }, - _programmaticGrouping: function _programmaticGrouping() { - this._map.eachLayer(function (layer) { - if (layer instanceof L.DistortableImageOverlay) { - layer.deselect(); - } - }); - }, - setCorner: function setCorner(corner, latlng) { - var edit = this.editing; - this._corners[corner] = latlng; - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - - this.edited = true; - return this; - }, - _cornerExceedsMapLats: function _cornerExceedsMapLats(zoom, corner, map) { - if (map.options.crs.Simple == L.CRS.Simple) { - return false; - } else { - var exceedsTop; - var exceedsBottom; - - if (zoom === 0) { - exceedsTop = map.project(corner).y < 2; - exceedsBottom = map.project(corner).y >= 255; - } else { - exceedsTop = map.project(corner).y / zoom < 2; - exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255; - } - - return exceedsTop || exceedsBottom; - } - }, - setCorners: function setCorners(latlngObj) { - var map = this._map; - var zoom = map.getZoom(); - var edit = this.editing; - var i = 0; // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402 - - for (var k in latlngObj) { - if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) { - // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - return; - } - } - - for (var _k in latlngObj) { - this._corners[i] = latlngObj[_k]; - i += 1; - } - - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - - this.edited = true; - return this; - }, - setCornersFromPoints: function setCornersFromPoints(pointsObj) { - var map = this._map; - var zoom = map.getZoom(); - var edit = this.editing; - var i = 0; - - for (var k in pointsObj) { - var corner = map.layerPointToLatLng(pointsObj[k]); - - if (this._cornerExceedsMapLats(zoom, corner, map)) { - // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - return; - } - } - - for (var _k2 in pointsObj) { - this._corners[i] = map.layerPointToLatLng(pointsObj[_k2]); - i += 1; - } - - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - - this.edited = true; - return this; - }, - scaleBy: function scaleBy(scale) { - var map = this._map; - var center = map.project(this.getCenter()); - var i; - var p; - var scaledCorners = {}; - - if (scale === 0) { - return; - } - - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(center).multiplyBy(scale).add(center); - scaledCorners[i] = map.unproject(p); - } - - this.setCorners(scaledCorners); - return this; - }, - getAngle: function getAngle() { - var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'deg'; - var matrix = this.getElement().style[L.DomUtil.TRANSFORM].split('matrix3d')[1].slice(1, -1).split(','); - var row0x = matrix[0]; - var row0y = matrix[1]; - var row1x = matrix[4]; - var row1y = matrix[5]; - var determinant = row0x * row1y - row0y * row1x; - var angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad'); - - if (determinant < 0) { - angle += angle < 0 ? Math.PI : -Math.PI; - } - - if (angle < 0) { - angle = 2 * Math.PI + angle; - } - - return unit === 'deg' ? Math.round(L.TrigUtil.radiansToDegrees(angle)) : L.Util.formatNum(angle, 2); - }, - setAngle: function setAngle(angle) { - var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'deg'; - var currentAngle = this.getAngle(unit); - var angleToRotateBy = angle - currentAngle; - this.rotateBy(angleToRotateBy, unit); - return this; - }, - rotateBy: function rotateBy(angle) { - var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'deg'; - var map = this._map; - var center = map.project(this.getCenter()); - var corners = {}; - var i; - var p; - var q; - - if (unit === 'deg') { - angle = L.TrigUtil.degreesToRadians(angle); - } - - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(center); - q = L.point(Math.cos(angle) * p.x - Math.sin(angle) * p.y, Math.sin(angle) * p.x + Math.cos(angle) * p.y); - corners[i] = map.unproject(q.add(center)); - } - - this.setCorners(corners); - return this; - }, - dragBy: function dragBy(formerPoint, newPoint) { - var map = this._map; - var i; - var p; - var transCorners = {}; - var delta = map.project(formerPoint).subtract(map.project(newPoint)); - - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(delta); - transCorners[i] = map.unproject(p); - } - - this.setCorners(transCorners); - }, - restore: function restore() { - var map = this._map; - var center = this._initialDimensions.center; - var offset = this._initialDimensions.offset; - var zoom = this._initialDimensions.zoom; - var corners = [center.subtract(offset), center.add(L.point(offset.x, -offset.y)), center.add(L.point(-offset.x, offset.y)), center.add(offset)]; - - for (var i = 0; i < 4; i++) { - if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) { - this.setCorner(i, map.unproject(corners[i], zoom)); - } - } - - this.edited = false; - this.fire('restore'); - return this; - }, - - /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */ - - /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */ - _getTranslateString: function _getTranslateString(point) { - // on WebKit browsers (Chrome/Safari/iOS Safari/Android) - // using translate3d instead of translate - // makes animation smoother as it ensures HW accel is used. - // Firefox 13 doesn't care - // (same speed either way), Opera 12 doesn't support translate3d - var is3d = L.Browser.webkit3d; - var open = 'translate' + (is3d ? '3d' : '') + '('; - var close = (is3d ? ',0' : '') + ')'; - return open + point.x + 'px,' + point.y + 'px' + close; - }, - _reset: function _reset() { - var map = this._map; - var image = this.getElement(); - var latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map); - - var transformMatrix = this._calculateProjectiveTransform(latLngToLayerPoint); - - var topLeft = latLngToLayerPoint(this.getCorner(0)); - var warp = L.DomUtil.getMatrixString(transformMatrix); - - var translation = this._getTranslateString(topLeft); - /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ - - - image._leaflet_pos = topLeft; - image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); - /* Set origin to the upper-left corner rather than - * the center of the image, which is the default. - */ - - image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0'; - this.rotation.deg = this.getAngle(); - this.rotation.rad = this.getAngle('rad'); - }, - - /* - * Calculates the transform string that will be - * correct *at the end* of zooming. - * Leaflet then generates a CSS3 animation between the current transform and - * future transform which makes the transition appear smooth. - */ - _animateZoom: function _animateZoom(event) { - var map = this._map; - var image = this.getElement(); - - var latLngToNewLayerPoint = function latLngToNewLayerPoint(latlng) { - return map._latLngToNewLayerPoint(latlng, event.zoom, event.center); - }; - - var transformMatrix = this._calculateProjectiveTransform(latLngToNewLayerPoint); - - var topLeft = latLngToNewLayerPoint(this.getCorner(0)); - var warp = L.DomUtil.getMatrixString(transformMatrix); - - var translation = this._getTranslateString(topLeft); - /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ - - - image._leaflet_pos = topLeft; - image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); - }, - getCorners: function getCorners() { - return this._corners; - }, - getCorner: function getCorner(i) { - return this._corners[i]; - }, - // image (vertex) centroid calculation - getCenter: function getCenter() { - var map = this._map; - var reduce = this.getCorners().reduce(function (agg, corner) { - return agg.add(map.project(corner)); - }, L.point(0, 0)); - return map.unproject(reduce.divideBy(4)); - }, - _calculateProjectiveTransform: function _calculateProjectiveTransform(latLngToCartesian) { - /* Setting reasonable but made-up image defaults - * allow us to place images on the map before - * they've finished downloading. */ - var offset = latLngToCartesian(this.getCorner(0)); - var w = this.getElement().offsetWidth || 500; - var h = this.getElement().offsetHeight || 375; - var c = []; - var j; - /* Convert corners to container points (i.e. cartesian coordinates). */ - - for (j = 0; j < 4; j++) { - c.push(latLngToCartesian(this.getCorner(j))._subtract(offset)); - } - /* - * This matrix describes the action of - * the CSS transform on each corner of the image. - * It maps from the coordinate system centered - * at the upper left corner of the image - * to the region bounded by the latlngs in this._corners. - * For example: - * 0, 0, c[0].x, c[0].y - * says that the upper-left corner of the image - * maps to the first latlng in this._corners. - */ - - - return L.MatrixUtil.general2DProjection(0, 0, c[0].x, c[0].y, w, 0, c[1].x, c[1].y, 0, h, c[2].x, c[2].y, w, h, c[3].x, c[3].y); - } -}); - -L.distortableImageOverlay = function (id, options) { - return new L.DistortableImageOverlay(id, options); -}; - -L.Map.addInitHook(function () { - if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) { - L.DomUtil.addClass(this.getContainer(), 'ldi'); - } -}); - -/***/ }), - -/***/ "./src/components/DistortableImage.Keymapper.js": -/*!******************************************************!*\ - !*** ./src/components/DistortableImage.Keymapper.js ***! - \******************************************************/ -/***/ (function() { - -var _this = this; - -L.DomUtil = L.DomUtil || {}; -L.DistortableImage = L.DistortableImage || {}; -L.distortableImage = L.DistortableImage; -L.DistortableImage.Keymapper = L.Handler.extend({ - options: { - position: 'topright' - }, - initialize: function initialize(map, options) { - this._map = map; - L.setOptions(this, options); - }, - addHooks: function addHooks() { - if (!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 removeHooks() { - if (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 = false; - } - }, - _buildContainer: function _buildContainer() { - var container = L.DomUtil.create('div', 'ldi-keymapper-hide'); - container.setAttribute('id', 'ldi-keymapper'); - var divider = L.DomUtil.create('br', 'divider'); - container.appendChild(divider); - return container; - }, - _createButton: function _createButton() { - var toggler = L.DomUtil.create('a', ''); - toggler.innerHTML = L.IconUtil.create('keyboard_open'); - toggler.setAttribute('id', 'toggle-keymapper'); - toggler.setAttribute('href', '#'); - toggler.setAttribute('title', 'Show keymap'); // Will force screen readers like VoiceOver to read this as "Show keymap - button" - - toggler.setAttribute('role', 'button'); - toggler.setAttribute('aria-label', 'Show keymap'); - return toggler; - }, - _wrap: function _wrap() { - var wrap = L.DomUtil.create('div', ''); - wrap.setAttribute('id', 'keymapper-wrapper'); - wrap.style.display = 'none'; - return wrap; - }, - _setMapper: function _setMapper(container, wrap, button) { - this._keymapper = L.control({ - position: this.options.position - }); - - this._keymapper.onAdd = function () { - container.appendChild(wrap); - wrap.insertAdjacentHTML('beforeend', '' + '
    ' + - /* eslint-disable */ - '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
    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
    '); - /* eslint-enable */ - - container.appendChild(button); - return container; - }; - - this._keymapper.addTo(this._map); - }, - _toggleKeymapper: function _toggleKeymapper(e) { - e.preventDefault(); - this._container.className = this._container.className === 'ldi-keymapper leaflet-control' ? 'ldi-keymapper-hide leaflet-control' : 'ldi-keymapper leaflet-control'; - this._scrollWrapper.style.display = this._scrollWrapper.style.display === 'none' ? 'block' : 'none'; - this._toggler.innerHTML = this._toggler.innerHTML === 'close' ? L.IconUtil.create('keyboard_open') : 'close'; - L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap'); - L.DomUtil.toggleClass(this._toggler, 'close-icon'); - }, - _injectIconSet: function _injectIconSet() { - if (document.querySelector('#keymapper-iconset')) { - return; - } - - var el = L.DomUtil.create('div', ''); - el.id = 'keymapper-iconset'; - el.setAttribute('hidden', 'hidden'); - this._iconset = new L.KeymapperIconSet().render(); - el.innerHTML = this._iconset; - document.querySelector('.leaflet-control-container').appendChild(el); - } -}); -L.DistortableImage.Keymapper.addInitHook(function () { - L.DistortableImage.Keymapper.prototype._n = L.DistortableImage.Keymapper.prototype._n ? L.DistortableImage.Keymapper.prototype._n + 1 : 1; // dont enable keymapper for mobile - - if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) { - _this.enable(); - - _this._injectIconSet(); - } -}); - -L.distortableImage.keymapper = function (map, options) { - return new L.DistortableImage.Keymapper(map, options); -}; - -/***/ }), - -/***/ "./src/edit/DistortableCollection.Edit.js": -/*!************************************************!*\ - !*** ./src/edit/DistortableCollection.Edit.js ***! - \************************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; // this class holds the keybindings and toolbar API for an image collection instance - -L.DistortableCollection.Edit = L.Handler.extend({ - options: { - keymap: L.distortableImage.group_action_map - }, - initialize: function initialize(group, options) { - this._group = group; - this._exportOpts = group.options.exportOpts; - L.setOptions(this, options); - L.distortableImage.group_action_map.Escape = '_decollectAll'; - }, - addHooks: function addHooks() { - var group = this._group; - var map = 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); - - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.on(map, 'click', this._decollectAll, this); - } - - L.DomEvent.on(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick, - boxcollectend: this._addCollections - }, this); - this._group.editable = true; - - this._group.eachLayer(function (layer) { - return layer.editing.enable(); - }); - }, - removeHooks: function removeHooks() { - var group = this._group; - var map = group._map; - L.DomEvent.off(document, 'keydown', this._onKeyDown, this); - - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.off(map, 'click', this._decollectAll, this); - } - - L.DomEvent.off(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick, - boxcollectend: this._addCollections - }, this); - - this._decollectAll(); - - this._group.editable = false; - - this._group.eachLayer(function (layer) { - return layer.editing.disable(); - }); - }, - enable: function enable() { - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - this._enabled = false; - this.removeHooks(); - return this; - }, - _onKeyDown: function _onKeyDown(e) { - var keymap = this.options.keymap; - var handlerName = keymap[e.key]; - - if (!this[handlerName]) { - return; - } - - if (this._group.anyCollected()) { - this[handlerName].call(this); - } - }, - _singleClick: function _singleClick(e) { - if (e.type === 'singleclick') { - this._decollectAll(e); - } else { - return; - } - }, - _singleClickListeners: function _singleClickListeners() { - var map = this._group._map; - L.DomEvent.off(map, 'click', this._decollectAll, this); - L.DomEvent.on(map, 'singleclick', this._decollectAll, this); - }, - _resetClickListeners: function _resetClickListeners() { - var map = this._group._map; - L.DomEvent.on(map, 'click', this._decollectAll, this); - L.DomEvent.off(map, 'singleclick', this._decollectAll, this); - }, - _decollectAll: function _decollectAll(e) { - var oe; - - if (e) { - oe = e.originalEvent; - } - /** - * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete - * also prevents deselection following a click on a disabled img by differentiating it from the map - */ - - - if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) { - return; - } - - this._group.eachLayer(function (layer) { - L.DomUtil.removeClass(layer.getElement(), 'collected'); - layer.deselect(); - }); - - this._removeToolbar(); - - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - _unlockGroup: function _unlockGroup() { - var _this = this; - - if (!this.hasTool(L.UnlockAction)) { - return; - } - - this._group.eachLayer(function (layer) { - if (_this._group.isCollected(layer)) { - var edit = layer.editing; - - edit._unlock(); // unlock updates the layer's handles; deselect to ensure they're hidden - - - layer.deselect(); - } - }); - }, - _lockGroup: function _lockGroup() { - var _this2 = this; - - if (!this.hasTool(L.LockAction)) { - return; - } - - this._group.eachLayer(function (layer) { - if (_this2._group.isCollected(layer)) { - var edit = layer.editing; - - edit._lock(); // map.addLayer also deselects the image, so we reselect here - - - L.DomUtil.addClass(layer.getElement(), 'collected'); - } - }); - }, - _addCollections: function _addCollections(e) { - var _this3 = this; - - var box = e.boxCollectBounds; - var map = this._group._map; - - this._group.eachLayer(function (layer) { - var edit = layer.editing; - - if (layer.isSelected()) { - layer.deselect(); - } - - var zoom = map.getZoom(); - var center = map.getCenter(); - var imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1)); - imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center); - - if (box.intersects(imgBounds) && edit.enabled()) { - if (!_this3.toolbar) { - _this3._addToolbar(); - } - - L.DomUtil.addClass(layer.getElement(), 'collected'); - } - }); - }, - _removeGroup: function _removeGroup(e) { - var _this4 = this; - - if (!this.hasTool(L.DeleteAction)) { - return; - } - - var layersToRemove = this._group._toRemove(); - - var n = layersToRemove.length; - - if (n === 0) { - return; - } - - var choice = L.DomUtil.confirmDeletes(n); - - if (choice) { - layersToRemove.forEach(function (layer) { - _this4._group.removeLayer(layer); - }); - - if (!this._group.anyCollected()) { - this._removeToolbar(); - } - } - - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - cancelExport: function cancelExport() { - if (!this.customCollection) { - this._exportOpts.collection = undefined; - } - - clearInterval(this.updateInterval); - }, - _addToolbar: function _addToolbar() { - var group = this._group; - var map = group._map; - - if (group.options.suppressToolbar || this.toolbar) { - return; - } - - this.toolbar = L.distortableImage.controlBar({ - actions: this.editActions, - position: 'topleft' - }).addTo(map, group); - }, - _removeToolbar: function _removeToolbar() { - var map = this._group._map; - - if (this.toolbar) { - map.removeLayer(this.toolbar); - this.toolbar = false; - } else { - return false; - } - }, - hasTool: function hasTool(value) { - return this.editActions.some(function (action) { - return action === value; - }); - }, - addTool: function addTool(value) { - if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { - this._removeToolbar(); - - this.editActions.push(value); - - this._addToolbar(); - } - - return this; - }, - removeTool: function removeTool(value) { - var _this5 = this; - - this.editActions.some(function (item, idx) { - if (_this5.editActions[idx] === value) { - _this5._removeToolbar(); - - _this5.editActions.splice(idx, 1); - - _this5._addToolbar(); - - return true; - } else { - return false; - } - }); - return this; - }, - startExport: function startExport() { - var _this6 = this; - - if (!this.hasTool(L.ExportAction)) { - return; - } - - return new Promise(function (resolve) { - var opts = _this6._exportOpts; - opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion - - var statusUrl; - _this6.updateInterval = null; // this may be overridden to update the UI to show export progress or completion - - var _defaultUpdater = function _defaultUpdater(data) { - data = JSON.parse(data); // optimization: fetch status directly from google storage: - - if (data.status_url) { - if (statusUrl !== data.status_url && data.status_url.match('.json')) { - // if (data.status_url && data.status_url.substr(0,1) === "/") { - // opts.statusUrl = opts.statusUrl + data.status_url; - // } else { - statusUrl = data.status_url; // } - } - - if (data.status === 'complete') { - clearInterval(_this6.updateInterval); - - if (!_this6.customCollection) { - _this6._exportOpts.collection = undefined; - } - - resolve(); - - if (data.jpg !== null) { - alert('Export succeeded. ' + opts.exportUrl + data.jpg); - } - } // TODO: update to clearInterval when status == "failed" if we update that in this file: - // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb - - - console.log(data); - } - }; // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json; - // this may be overridden to integrate with any UI - - - var _defaultHandleStatusRes = function _defaultHandleStatusRes(data) { - statusUrl = opts.statusUrl + data; // repeatedly fetch the status.json - - _this6.updateInterval = setInterval(function () { - var reqOpts = { - method: 'GET' - }; - var req = new Request("".concat(statusUrl, "?").concat(Date.now()), reqOpts); - fetch(req).then(function (res) { - if (res.ok) { - return res.text(); - } - }).then(opts.updater); - }, opts.frequency); - }; // initiate the export - - - var _defaultFetchStatusUrl = function _defaultFetchStatusUrl(mergedOpts) { - var form = new FormData(); - form.append('collection', JSON.stringify(mergedOpts.collection)); - form.append('scale', mergedOpts.scale); - form.append('upload', true); - var reqOpts = { - method: 'POST', - body: form - }; - var req = new Request(mergedOpts.exportStartUrl, reqOpts); - fetch(req).then(function (res) { - if (res.ok) { - return res.text(); - } - }).then(mergedOpts.handleStatusRes); - }; // If the user has passed collection property - - - _this6.customCollection = !!opts.collection; - - if (!_this6.customCollection) { - opts.collection = _this6._group.generateExportJson().images; - } - - opts.frequency = opts.frequency || 3000; - opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel ! - - opts.updater = opts.updater || _defaultUpdater; - opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes; - opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl; - opts.fetchStatusUrl(opts); - }); - } -}); - -L.distortableCollection.edit = function (group, options) { - return new L.DistortableCollection.Edit(group, options); -}; - -/***/ }), - -/***/ "./src/edit/DistortableImage.Edit.js": -/*!*******************************************!*\ - !*** ./src/edit/DistortableImage.Edit.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; // holds the keybindings & toolbar API for an individual image instance - -L.DistortableImage.Edit = L.Handler.extend({ - options: { - opacity: 0.7, - outline: '1px solid red', - keymap: L.distortableImage.action_map - }, - initialize: function initialize(overlay, options) { - this._overlay = overlay; - this._toggledImage = false; - this._mode = overlay.options.mode; - this._transparent = false; - this._outlined = false; - L.setOptions(this, options); - L.distortableImage.action_map.Escape = '_deselect'; - }, - - /* Run on image selection. */ - addHooks: function addHooks() { - var overlay = this._overlay; - this.editActions = this.options.actions; - /* bring the selected image into view */ - - overlay.bringToFront(); - - this._initModes(); - - this._initHandles(); - - this._appendHandlesandDragable(); - - if (overlay.isSelected() && !overlay.options.suppressToolbar) { - this._addToolbar(); - } - - this.parentGroup = overlay.eP ? overlay.eP : false; - L.DomEvent.on(overlay.getElement(), { - dblclick: this.nextMode - }, this); - L.DomEvent.on(window, 'keydown', this._onKeyDown, this); - }, - - /* Run on image deselection. */ - removeHooks: function removeHooks() { - var overlay = this._overlay; - var eP = this.parentGroup; // First, check if dragging exists - it may be off due to locking - - this._disableDragging(); - - if (this.toolbar) { - this._removeToolbar(); - } - - for (var handle in this._handles) { - L.DomUtil.remove(handle); - } - /** - * ensures if you disable an image while it is multi-selected - * additional deselection logic is run - */ - - - if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) { - L.DomUtil.removeClass(overlay.getElement(), 'collected'); - } - - if (eP && !eP.anyCollected() && eP.editing.toolbar) { - eP.editing._removeToolbar(); - } - - L.DomEvent.off(overlay.getElement(), { - dblclick: this.nextMode - }, this); - L.DomEvent.off(window, 'keydown', this._onKeyDown, this); - }, - disable: function disable() { - if (!this._enabled) { - return this; - } - - this._overlay.deselect(); - - this._enabled = false; - this.removeHooks(); - return this; - }, - _initModes: function _initModes() { - this._modes = {}; // passed from L.DistortablImage.PopupBar. If the mode is one - // of the current toolbar actions, adds it to this._modes - - for (var mode in L.DistortableImage.Edit.MODES) { - var action = L.DistortableImage.Edit.MODES[mode]; - - if (this.editActions.indexOf(action) !== -1) { - this._modes[mode] = action; - } - } // sets the current mode to the 1st available one if the one selected - // during initialization is not available - - - if (!this._modes[this._mode]) { - this._mode = Object.keys(this._modes)[0]; - } - }, - _initHandles: function _initHandles() { - var overlay = this._overlay; - var i; - this._dragHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._dragHandles.addLayer(L.dragHandle(overlay, i)); - } - - this._scaleHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._scaleHandles.addLayer(L.scaleHandle(overlay, i)); - } - - this._distortHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._distortHandles.addLayer(L.distortHandle(overlay, i)); - } - - this._rotateHandles = L.layerGroup(); // individual rotate - - for (i = 0; i < 4; i++) { - this._rotateHandles.addLayer(L.rotateHandle(overlay, i)); - } // handle includes rotate AND scale - - - this._freeRotateHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i)); - } - - this._lockHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._lockHandles.addLayer(L.lockHandle(overlay, i, { - draggable: false - })); - } - - this._handles = { - drag: this._dragHandles, - scale: this._scaleHandles, - distort: this._distortHandles, - rotate: this._rotateHandles, - freeRotate: this._freeRotateHandles, - lock: this._lockHandles - }; - }, - _appendHandlesandDragable: function _appendHandlesandDragable() { - var ov = this._overlay; // won't throw error if user adds 0 mode actions to toolbar - - if (!this._mode) { - this._enableDragging(); - - return; - } - - this._updateHandle(); - - if (!ov.isSelected() && this.currentHandle) { - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(0); - - if (handle.dragging) { - handle.dragging.disable(); - } - }); - } - - if (!this.isMode('lock')) { - this._enableDragging(); - } - }, - _onKeyDown: function _onKeyDown(e) { - var keymap = this.options.keymap; - var handlerName = keymap[e.key]; - var ov = this._overlay; - var eP = this.parentGroup; - - if (eP && eP.anyCollected()) { - return; - } - - if (this[handlerName] !== undefined && !ov.options.suppressToolbar) { - if (ov.isSelected() && this.toolbar) { - this[handlerName].call(this); - } - } - }, - replaceTool: function replaceTool(old, next) { - var _this = this; - - if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) { - return this; - } - - this.editActions.some(function (item, idx) { - if (item === old) { - _this._removeToolbar(); - - _this.editActions[idx] = next; - - _this._addToolbar(); - - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === old) { - delete _this._modes[mode]; - - _this._nextOrNone(mode); - } else if (L.DistortableImage.Edit.MODES[mode] === next) { - _this._modes[mode] = next; - } - } - - return true; - } - }); - return this; - }, - addTool: function addTool(value) { - if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { - this._removeToolbar(); - - this.editActions.push(value); - - this._addToolbar(); - - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === value) { - this._modes[mode] = value; - } - } - - if (!this._overlay.isSelected()) { - this._removeToolbar(); - } - } - - return this; - }, - hasTool: function hasTool(value) { - return this.editActions.some(function (action) { - return action === value; - }); - }, - removeTool: function removeTool(value) { - var _this2 = this; - - this.editActions.some(function (item, idx) { - if (item === value) { - _this2._removeToolbar(); - - _this2.editActions.splice(idx, 1); - - _this2._addToolbar(); - - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === value) { - delete _this2._modes[mode]; - - _this2._nextOrNone(mode); - } - } - - return true; - } - }); - - if (!this._overlay.isSelected()) { - this._removeToolbar(); - } - - return this; - }, - // set the mode to the next mode or if that was the last one set mode to '' - _nextOrNone: function _nextOrNone(mode) { - if (this.isMode(mode)) { - if (Object.keys(this.getModes()).length >= 1) { - this.nextMode(); - } else { - if (mode === 'lock') { - this._enableDragging(); - } - - this._mode = ''; - - this._updateHandle(); - } - } - }, - _removeToolbar: function _removeToolbar() { - var ov = this._overlay; - var map = ov._map; - - if (this.toolbar) { - map.removeLayer(this.toolbar); - this.toolbar = false; - } - }, - _enableDragging: function _enableDragging() { - var _this3 = this; - - var overlay = this._overlay; - var map = overlay._map; - this.dragging = new L.Draggable(overlay.getElement()); - this.dragging.enable(); - /* Hide toolbars and markers while dragging; click will re-show it */ - - this.dragging.on('dragstart', function () { - overlay.fire('dragstart'); - - _this3._removeToolbar(); - }); - /* - * Adjust default behavior of L.Draggable, which overwrites the CSS3 - * distort transformations that we set when it calls L.DomUtil.setPosition. - */ - - this.dragging._updatePosition = function () { - var topLeft = overlay.getCorner(0); - - var delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft)); - - var currentPoint; - var corners = {}; - var i; - this.fire('predrag'); - - for (i = 0; i < 4; i++) { - currentPoint = map.latLngToLayerPoint(overlay.getCorner(i)); - corners[i] = map.layerPointToLatLng(currentPoint.add(delta)); - } - - overlay.setCorners(corners); - overlay.fire('drag'); - this.fire('drag'); - }; - - this.dragging.on('dragend', function () { - overlay.fire('dragend'); - }); - }, - _disableDragging: function _disableDragging() { - if (this.dragging) { - this.dragging.disable(); - delete this.dragging; - } - }, - _dragMode: function _dragMode() { - this.setMode('drag'); - }, - _scaleMode: function _scaleMode() { - this.setMode('scale'); - }, - _distortMode: function _distortMode() { - this.setMode('distort'); - }, - _rotateMode: function _rotateMode() { - this.setMode('rotate'); - }, - _freeRotateMode: function _freeRotateMode() { - this.setMode('freeRotate'); - }, - _toggleLockMode: function _toggleLockMode() { - if (this.isMode('lock')) { - this._unlock(); - } else { - this._lock(); - } - }, - _toggleOpacity: function _toggleOpacity() { - var image = this._overlay.getElement(); - - var opacity; - - if (!this.hasTool(L.OpacityAction)) { - return; - } - - this._transparent = !this._transparent; - opacity = this._transparent ? this.options.opacity : 1; - L.DomUtil.setOpacity(image, opacity); - image.setAttribute('opacity', opacity); - - this._refresh(); - }, - _toggleBorder: function _toggleBorder() { - var image = this._overlay.getElement(); - - var outline; - - if (!this.hasTool(L.BorderAction)) { - return; - } - - this._outlined = !this._outlined; - outline = this._outlined ? this.options.outline : 'none'; - image.style.outline = outline; - - this._refresh(); - }, - // compare this to using overlay zIndex - _toggleOrder: function _toggleOrder() { - if (this._toggledImage) { - this._stackUp(); - } else { - this._stackDown(); - } - }, - _removeOverlay: function _removeOverlay() { - var ov = this._overlay; - var eP = this.parentGroup; - - if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { - return; - } - - var choice = L.DomUtil.confirmDelete(); - - if (!choice) { - return; - } - - this._removeToolbar(); - - if (eP) { - eP.removeLayer(ov); - } else { - ov._map.removeLayer(ov); - } - }, - // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82 - _getExport: function _getExport() { - var overlay = this._overlay; - var map = overlay._map; - var img = overlay.getElement(); - - if (!this.hasTool(L.ExportAction)) { - return; - } // make a new image - - - var downloadable = new Image(); - downloadable.id = downloadable.id || 'tempId12345'; - document.body.appendChild(downloadable); - - downloadable.onload = function onLoadDownloadableImage() { - var height = downloadable.height; - var width = downloadable.width; - var nw = map.latLngToLayerPoint(overlay.getCorner(0)); - var ne = map.latLngToLayerPoint(overlay.getCorner(1)); - var sw = map.latLngToLayerPoint(overlay.getCorner(2)); - var se = map.latLngToLayerPoint(overlay.getCorner(3)); // I think this is to move the image to the upper left corner, - // eslint-disable-next-line max-len - // jywarren: i think we may need these or the image goes off the edge of the canvas - // jywarren: but these seem to break the distortion math... - // jywarren: i think it should be rejiggered so it - // finds the most negative values of x and y and then - // adds those to all coordinates - // nw.x -= nw.x; - // ne.x -= nw.x; - // se.x -= nw.x; - // sw.x -= nw.x; - // nw.y -= nw.y; - // ne.y -= nw.y; - // se.y -= nw.y; - // sw.y -= nw.y; - // run once warping is complete - - downloadable.onload = function () { - L.DomUtil.remove(downloadable); - }; - - if (window && window.hasOwnProperty('warpWebGl')) { - warpWebGl(downloadable.id, [0, 0, width, 0, width, height, 0, height], [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y], true // trigger download - ); - } - }; - - downloadable.src = overlay.options.fullResolutionSrc || img.src; - }, - _stackUp: function _stackUp() { - var t = this._toggledImage; - - if (!t || !this.hasTool(L.StackAction)) { - return; - } - - this._toggledImage = false; - - this._overlay.bringToFront(); - - this._refresh(); - }, - _stackDown: function _stackDown() { - var t = this._toggledImage; - - if (t || !this.hasTool(L.StackAction)) { - return; - } - - this._toggledImage = true; - - this._overlay.bringToBack(); - - this._refresh(); - }, - _unlock: function _unlock() { - var ov = this._overlay; - var map = ov._map; - var eP = this.parentGroup; - - if (!this.isMode('lock')) { - return; - } - - if (eP && !eP.isCollected(ov) || !eP) { - if (!this.hasTool(L.LockAction)) { - return; - } - } - - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - - if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) { - this._mode = ''; - this.currentHandle = ''; - } else { - this._mode = ov.options.mode; - } - - this._updateHandle(); - - this._enableDragging(); - - this._refresh(); - }, - _lock: function _lock() { - var ov = this._overlay; - var map = ov._map; - var eP = this.parentGroup; - - if (this.isMode('lock')) { - return; - } - - if (eP && !eP.isCollected(ov) || !eP) { - if (!this.hasTool(L.LockAction)) { - return; - } - } - - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - - this._mode = 'lock'; - - this._updateHandle(); - - this._disableDragging(); - - this._refresh(); - }, - _deselect: function _deselect() { - this._overlay.deselect(); - }, - _showMarkers: function _showMarkers(e) { - var eP = this.parentGroup; - - if (!this.currentHandle) { - return; - } // only markers we want in collect interface for now is lock - - - if (!this.isMode('lock') && eP && eP.anyCollected()) { - return; - } - - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(1); - - if (handle.dragging) { - handle.dragging.enable(); - } - - L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive'); - }); - }, - _hideMarkers: function _hideMarkers() { - var ov = this._overlay; - var eP = this.parentGroup; // workaround for race condition w/ feature group - - if (!this._handles) { - this._initHandles(); - } - - if (!this.currentHandle) { - return; - } - - if (this.isMode('lock') && eP && eP.isCollected(ov)) { - return; - } - - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(0); - - if (handle.dragging) { - handle.dragging.disable(); - } - - L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive'); - }); - }, - _updateHandle: function _updateHandle() { - var ov = this._overlay; - var map = ov._map; - var mode = this.getMode(); - - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - - this.currentHandle = mode === '' ? '' : this._handles[mode]; - - if (this.currentHandle !== '') { - map.addLayer(this.currentHandle); - } - }, - _addToolbar: function _addToolbar() { - var ov = this._overlay; - var eP = this.parentGroup; - var map = ov._map; // Find the topmost point on the image. - - var corners = ov.getCorners(); - var maxLat = -Infinity; - - if (eP && eP.anyCollected()) { - eP.editing._addToolbar(); - - return; - } - - if (ov.options.suppressToolbar || this.toolbar) { - return; - } - - for (var i = 0; i < corners.length; i++) { - if (corners[i].lat > maxLat) { - maxLat = corners[i].lat; - } - } // Longitude is based on the centroid of the image. - - - var raisedPoint = ov.getCenter(); - raisedPoint.lat = maxLat; - this.toolbar = L.distortableImage.popupBar(raisedPoint, { - actions: this.editActions - }).addTo(map, ov); - ov.fire('toolbar:created'); - }, - _refresh: function _refresh() { - if (this.toolbar) { - this._removeToolbar(); - } - - this._addToolbar(); - }, - _updateToolbarPos: function _updateToolbarPos() { - var overlay = this._overlay; // Find the topmost point on the image. - - var corners = overlay.getCorners(); - var toolbar = this.toolbar; - var maxLat = -Infinity; - - if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) { - for (var i = 0; i < corners.length; i++) { - if (corners[i].lat > maxLat) { - maxLat = corners[i].lat; - } - } // Longitude is based on the centroid of the image. - - - var raisedPoint = overlay.getCenter(); - raisedPoint.lat = maxLat; - - if (!overlay.options.suppressToolbar) { - this.toolbar.setLatLng(raisedPoint); - } - } - }, - hasMode: function hasMode(mode) { - return !!this._modes[mode]; - }, - getMode: function getMode() { - if (!this.enabled()) { - return; - } - - return this._mode; - }, - getModes: function getModes() { - return this._modes; - }, - isMode: function isMode(mode) { - if (!this.enabled()) { - return false; - } - - return this._mode === mode; - }, - setMode: function setMode(newMode) { - var ov = this._overlay; - var eP = this.parentGroup; - var mode = this.getMode(); - - if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) { - return; - } - - if (this.toolbar) { - this.toolbar.clickTool(newMode); - } - - if (this.isMode('lock') && !this.dragging) { - this._enableDragging(); - } - - this._mode = newMode; - - if (this.isMode('lock')) { - this._disableDragging(); - } - - this._updateHandle(); - - this._refresh(); - - if (eP && eP.isCollected(ov)) { - ov.deselect(); - } - - return this; - }, - - /** - * need to attach a stop to img dblclick or it will propagate to - * the map and fire the handler that shows map location labels on map dblclick. - */ - nextMode: function nextMode(e) { - var mode = this.getMode(); - var eP = this.parentGroup; - var modesArray = Object.keys(this.getModes()); - var idx = modesArray.indexOf(mode); - var nextIdx = (idx + 1) % modesArray.length; - var newMode = modesArray[nextIdx]; - - if (e) { - if (eP && eP.anyCollected()) { - return; - } - - L.DomEvent.stop(e); - } - - return this.setMode(newMode); - } -}); - -L.distortableImage.edit = function (overlay, options) { - return new L.DistortableImage.Edit(overlay, options); -}; - -/***/ }), - -/***/ "./src/edit/actions/BorderAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/BorderAction.js ***! - \******************************************/ -/***/ (function() { - -L.BorderAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var mode = edit._mode; - var use; - var tooltip; - - if (edit._outlined) { - use = 'border_outer'; - tooltip = overlay.options.translation.removeBorder; - } else { - use = 'border_clear'; - tooltip = overlay.options.translation.addBorder; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: mode === 'lock' ? 'disabled' : '' - }; // conditional for disabling keybindings for this action when the image is locked. - - L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer'); - L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border'); - - edit._toggleBorder(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DeleteAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/DeleteAction.js ***! - \******************************************/ -/***/ (function() { - -L.DeleteAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use = 'delete_forever'; - var tooltip; - /** - * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only - * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods. - */ - - if (edit instanceof L.DistortableImage.Edit) { - tooltip = overlay.options.translation.deleteImage; // backspace windows / delete mac - - L.DistortableImage.action_map.Backspace = edit._mode === 'lock' ? '' : '_removeOverlay'; - } else { - tooltip = overlay.options.translation.deleteImages; - L.DistortableImage.group_action_map.Backspace = edit._mode === 'lock' ? '' : '_removeGroup'; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - if (edit instanceof L.DistortableImage.Edit) { - edit._removeOverlay(); - } else { - edit._removeGroup(); - } - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DistortAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/DistortAction.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'distort', - tooltip: overlay.options.translation.distortImage, - className: 'distort' - }; - L.DistortableImage.action_map.d = '_distortMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._distortMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DragAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/DragAction.js ***! - \****************************************/ -/***/ (function() { - -L.DragAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'drag', - tooltip: overlay.options.translation.dragImage, - className: 'drag' - }; - L.DistortableImage.action_map.D = '_dragMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._dragMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/EditAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/EditAction.js ***! - \****************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; -L.distortableImage = L.DistortableImage; -L.DistortableImage.action_map = {}; -L.EditAction = L.Toolbar2.Action.extend({ - options: { - toolbarIcon: { - svg: false, - html: '', - className: '', - tooltip: '' - } - }, - initialize: function initialize(map, overlay, options) { - this._overlay = overlay; - this._map = map; - L.setOptions(this, options); - L.Toolbar2.Action.prototype.initialize.call(this, options); - - this._injectIconSet(); - }, - _createIcon: function _createIcon(toolbar, container, args) { - var _this = this; - - var iconOptions = this.options.toolbarIcon; - var className = iconOptions.className; - var edit = this._overlay.editing; - this.toolbar = toolbar; - this._icon = L.DomUtil.create('li', '', container); - this._link = L.DomUtil.create('a', '', this._icon); - - if (iconOptions.svg) { - this._link.innerHTML = L.IconUtil.create(iconOptions.html); - } else { - this._link.innerHTML = iconOptions.html; - } - - this._link.setAttribute('href', '#'); - - this._link.setAttribute('title', iconOptions.tooltip); - - this._link.setAttribute('role', 'button'); - - L.DomUtil.addClass(this._link, this.constructor.baseClass); - - if (className) { - L.DomUtil.addClass(this._link, className); - - if (className === 'disabled') { - L.DomUtil.addClass(this._icon, className); - } - - if (className === edit._mode) { - L.DomUtil.addClass(this._link, 'selected-mode'); - } else { - L.DomUtil.removeClass(this._link, 'selected-mode'); - } - } - - L.DomEvent.on(this._link, 'click', this.enable, this); - L.DomEvent.on(this._overlay, 'update', function () { - var match = _this._link.innerHTML.match(/xlink:href="#restore"/); - - if (match && match.length === 1) { - _this._enableAction(); - } - }); - /* Add secondary toolbar */ - - this._addSubToolbar(toolbar, this._icon, args); - }, - _injectIconSet: function _injectIconSet() { - if (document.querySelector('#iconset')) { - return; - } - - var el = document.createElement('div'); - el.id = 'iconset'; - el.setAttribute('hidden', 'hidden'); - el.innerHTML = new L.ToolbarIconSet().render(); - document.querySelector('.leaflet-marker-pane').appendChild(el); - }, - _enableAction: function _enableAction() { - L.DomUtil.removeClass(this._link.parentElement, 'disabled'); - L.DomUtil.removeClass(this._link, 'disabled'); - }, - _disableAction: function _disableAction() { - L.DomUtil.addClass(this._link.parentElement, 'disabled'); - L.DomUtil.addClass(this._link, 'disabled'); - } -}); - -L.editAction = function (map, overlay, options) { - return new L.EditAction(map, overlay, options); -}; - -/***/ }), - -/***/ "./src/edit/actions/ExportAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/ExportAction.js ***! - \******************************************/ -/***/ (function() { - -L.ExportAction = L.EditAction.extend({ - // This function is executed every time we select an image - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var tooltip; - this.isExporting = false; - this.mouseLeaveSkip = true; - this.isHooksExecuted = false; - - if (edit instanceof L.DistortableImage.Edit) { - L.DistortableImage.action_map.e = '_getExport'; - tooltip = overlay.options.translation.exportImage; - } else { - L.DistortableImage.group_action_map.e = 'runExporter'; - tooltip = overlay.options.translation.exportImages; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'get_app', - tooltip: tooltip - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - if (edit instanceof L.DistortableImage.Edit) { - edit._getExport(); - - return; - } // Make sure that addHooks is executed only once, event listeners will handle the rest - - - if (this.isHooksExecuted) { - return; - } else { - this.isHooksExecuted = true; - } - - var exportTool = this._link.parentElement; - this.mouseEnterHandler = this.handleMouseEnter.bind(this); - this.mouseLeaveHandler = this.handleMouseLeave.bind(this); - L.DomEvent.on(exportTool, 'click', function () { - if (!this.isExporting) { - this.isExporting = true; - this.renderExportIcon(); - setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100); - edit.runExporter().then(function () { - this.resetState(); - this.detachMouseEventListeners(exportTool); - }.bind(this)); - } else { - // Clicking on the export icon after export has started will be ignored - if (this.mouseLeaveSkip) { - return; - } - - this.resetState(); - this.detachMouseEventListeners(exportTool); - edit.cancelExport(); - } - }, this); - }, - resetState: function resetState() { - this.renderDownloadIcon(); - this.isExporting = false; - this.mouseLeaveSkip = true; - }, - attachMouseEventListeners: function attachMouseEventListeners(element) { - element.addEventListener('mouseenter', this.mouseEnterHandler); - element.addEventListener('mouseleave', this.mouseLeaveHandler); - }, - detachMouseEventListeners: function detachMouseEventListeners(element) { - element.removeEventListener('mouseenter', this.mouseEnterHandler); - element.removeEventListener('mouseleave', this.mouseLeaveHandler); - }, - handleMouseEnter: function handleMouseEnter() { - this.renderCancelIcon(); - }, - handleMouseLeave: function handleMouseLeave() { - if (!this.mouseLeaveSkip) { - this.renderExportIcon(); - } else { - this.mouseLeaveSkip = false; - } - }, - renderDownloadIcon: function renderDownloadIcon() { - 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 renderExportIcon() { - L.IconUtil.toggleXlink(this._link, 'spinner'); - L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...'); - L.IconUtil.addClassToSvg(this._link, 'loader'); - }, - renderCancelIcon: function renderCancelIcon() { - L.IconUtil.toggleXlink(this._link, 'cancel'); - L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...'); - L.DomUtil.removeClass(this._link.firstChild, 'loader'); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/FreeRotateAction.js": -/*!**********************************************!*\ - !*** ./src/edit/actions/FreeRotateAction.js ***! - \**********************************************/ -/***/ (function() { - -L.FreeRotateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'crop_rotate', - tooltip: overlay.options.translation.freeRotateImage, - className: 'freeRotate' - }; - L.DistortableImage.action_map.f = '_freeRotateMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._freeRotateMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/GeolocateAction.js": -/*!*********************************************!*\ - !*** ./src/edit/actions/GeolocateAction.js ***! - \*********************************************/ -/***/ (function() { - -L.GeolocateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'explore', - tooltip: overlay.options.translation.geolocateImage, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var image = this._overlay.getElement(); - - EXIF.getData(image, L.EXIF(image)); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/LockAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/LockAction.js ***! - \****************************************/ -/***/ (function() { - -L.LockAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use; - var tooltip; - - if (edit instanceof L.DistortableImage.Edit) { - L.DistortableImage.action_map.u = '_unlock'; - L.DistortableImage.action_map.l = '_lock'; - tooltip = overlay.options.translation.lockMode; - use = edit.isMode('lock') ? 'lock' : 'unlock'; - } else { - L.DistortableImage.group_action_map.l = '_lockGroup'; - tooltip = overlay.options.translation.lockImages; - use = 'lock'; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: 'lock' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - if (edit instanceof L.DistortableImage.Edit) { - edit._toggleLockMode(); - } else { - edit._lockGroup(); - } - } -}); - -/***/ }), - -/***/ "./src/edit/actions/OpacityAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/OpacityAction.js ***! - \*******************************************/ -/***/ (function() { - -L.OpacityAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var mode = edit._mode; - var use; - var tooltip; - - if (edit._transparent) { - use = 'opacity_empty'; - tooltip = overlay.options.translation.makeImageOpaque; - } else { - use = 'opacity'; - tooltip = overlay.options.translation.makeImageTransparent; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: mode === 'lock' ? 'disabled' : '' - }; - L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - var link = this._link; - L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty'); - L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); - - edit._toggleOpacity(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/RestoreAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/RestoreAction.js ***! - \*******************************************/ -/***/ (function() { - -L.RestoreAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var mode = L.Utils.getNestedVal(overlay, 'editing', '_mode'); - var edited = overlay.edited; - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'restore', - tooltip: overlay.options.translation.restoreImage, - className: edited && mode !== 'lock' ? '' : 'disabled' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var ov = this._overlay; - L.DomEvent.on(ov, { - edit: this._enableAction, - restore: this._disableAction - }, this); - ov.restore(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/RotateAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/RotateAction.js ***! - \******************************************/ -/***/ (function() { - -L.RotateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'rotate', - tooltip: overlay.options.translation.rotateImage, - className: 'rotate' - }; - L.DistortableImage.action_map.r = '_rotateMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._rotateMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/ScaleAction.js": -/*!*****************************************!*\ - !*** ./src/edit/actions/ScaleAction.js ***! - \*****************************************/ -/***/ (function() { - -L.ScaleAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'scale', - tooltip: overlay.options.translation.scaleImage, - className: 'scale' - }; - L.DistortableImage.action_map.s = '_scaleMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._scaleMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/StackAction.js": -/*!*****************************************!*\ - !*** ./src/edit/actions/StackAction.js ***! - \*****************************************/ -/***/ (function() { - -L.StackAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use; - var tooltip; - - if (edit._toggledImage) { - use = 'flip_to_back'; - tooltip = overlay.options.translation.stackToFront; - } else { - use = 'flip_to_front'; - tooltip = overlay.options.translation.stackToBack; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp'; - L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back'); - L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back'); - - edit._toggleOrder(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/UnlockAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/UnlockAction.js ***! - \******************************************/ -/***/ (function() { - -L.UnlockAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'unlock', - tooltip: overlay.options.translation.unlockImages - }; - L.DistortableImage.group_action_map.u = '_unlockGroup'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._unlockGroup(); - } -}); - -/***/ }), - -/***/ "./src/edit/getEXIFdata.js": -/*!*********************************!*\ - !*** ./src/edit/getEXIFdata.js ***! - \*********************************/ -/***/ (function() { - -/* eslint-disable no-unused-vars */ -L.EXIF = function getEXIFdata(img) { - if (Object.keys(EXIF.getAllTags(img)).length !== 0) { - console.log(EXIF.getAllTags(img)); - var GPS = EXIF.getAllTags(img); - var altitude; - /* If the lat/lng is available. */ - - if (typeof GPS.GPSLatitude !== 'undefined' && typeof GPS.GPSLongitude !== 'undefined') { - // sadly, encoded in [degrees,minutes,seconds] - // primitive value = GPS.GPSLatitude[x].numerator - var lat = GPS.GPSLatitude[0] + GPS.GPSLatitude[1] / 60 + GPS.GPSLatitude[2] / 3600; - var lng = GPS.GPSLongitude[0] + GPS.GPSLongitude[1] / 60 + GPS.GPSLongitude[2] / 3600; - - if (GPS.GPSLatitudeRef !== 'N') { - lat = lat * -1; - } - - if (GPS.GPSLongitudeRef === 'W') { - lng = lng * -1; - } - } // Attempt to use GPS compass heading; will require - // some trig to calc corner points, which you can find below: - - - var angle = 0; // "T" refers to "True north", so -90. - - if (GPS.GPSImgDirectionRef === 'T') { - angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); // "M" refers to "Magnetic north" - } else if (GPS.GPSImgDirectionRef === 'M') { - angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); - } else { - console.log('No compass data found'); - } - - console.log('Orientation:', GPS.Orientation); - /* If there is orientation data -- i.e. landscape/portrait etc */ - - if (GPS.Orientation === 6) { - // CCW - angle += Math.PI / 180 * -90; - } else if (GPS.Orientation === 8) { - // CW - angle += Math.PI / 180 * 90; - } else if (GPS.Orientation === 3) { - // 180 - angle += Math.PI / 180 * 180; - } - /* If there is altitude data */ - - - if (typeof GPS.GPSAltitude !== 'undefined' && typeof GPS.GPSAltitudeRef !== 'undefined') { - // Attempt to use GPS altitude: - // (may eventually need to find EXIF field of view for correction) - if (typeof GPS.GPSAltitude !== 'undefined' && typeof GPS.GPSAltitudeRef !== 'undefined') { - altitude = GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator + GPS.GPSAltitudeRef; - } else { - altitude = 0; // none - } - } - } else { - alert('EXIF initialized. Press again to view data in console.'); - } -}; - -/***/ }), - -/***/ "./src/edit/handles/DistortHandle.js": -/*!*******************************************!*\ - !*** ./src/edit/handles/DistortHandle.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortHandle = L.EditHandle.extend({ - options: { - TYPE: 'distort', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - overlay.setCorner(this._corner, this.getLatLng()); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.distortHandle = function (overlay, idx, options) { - return new L.DistortHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/DragHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/DragHandle.js ***! - \****************************************/ -/***/ (function() { - -L.DragHandle = L.EditHandle.extend({ - options: { - TYPE: 'drag', - icon: L.icon({ - // eslint-disable-next-line max-len - 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=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - overlay.dragBy(formerLatLng, newLatLng); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.dragHandle = function (overlay, idx, options) { - return new L.DragHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/EditHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/EditHandle.js ***! - \****************************************/ -/***/ (function() { - -L.EditHandle = L.Marker.extend({ - initialize: function initialize(overlay, corner, options) { - var latlng = overlay.getCorner(corner); - L.setOptions(this, options); - this._handled = overlay; - this._corner = corner; - var markerOptions = { - draggable: true, - zIndexOffset: 10 - }; - - if (options && options.hasOwnProperty('draggable')) { - markerOptions.draggable = options.draggable; - } - - L.Marker.prototype.initialize.call(this, latlng, markerOptions); - }, - onAdd: function onAdd(map) { - L.Marker.prototype.onAdd.call(this, map); - - this._bindListeners(); - - this.updateHandle(); - }, - onRemove: function onRemove(map) { - this._unbindListeners(); - - L.Marker.prototype.onRemove.call(this, map); - }, - _onHandleDragStart: function _onHandleDragStart() { - this._handled.fire('editstart'); - }, - _onHandleDragEnd: function _onHandleDragEnd() { - this._fireEdit(); - }, - _fireEdit: function _fireEdit() { - this._handled.edited = true; - - this._handled.fire('edit'); - }, - _bindListeners: function _bindListeners() { - this.on({ - contextmenu: L.DomEvent.stop, - dragstart: this._onHandleDragStart, - drag: this._onHandleDrag, - dragend: this._onHandleDragEnd - }, this); - - this._handled._map.on('zoomend', this.updateHandle, this); - - this._handled.on('update', this.updateHandle, this); - }, - _unbindListeners: function _unbindListeners() { - this.off({ - contextmenu: L.DomEvent.stop, - dragstart: this._onHandleDragStart, - drag: this._onHandleDrag, - dragend: this._onHandleDragEnd - }, this); - - this._handled._map.off('zoomend', this.updateHandle, this); - - this._handled.off('update', this.updateHandle, this); - }, - - /* Takes two latlngs and calculates the scaling difference. */ - _calculateScalingFactor: function _calculateScalingFactor(latlngA, latlngB) { - var overlay = this._handled; - var map = overlay._map; - var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); - var formerPoint = map.latLngToLayerPoint(latlngA); - var newPoint = map.latLngToLayerPoint(latlngB); - - var formerRadiusSquared = this._d2(centerPoint, formerPoint); - - var newRadiusSquared = this._d2(centerPoint, newPoint); - - return Math.sqrt(newRadiusSquared / formerRadiusSquared); - }, - - /* Distance between two points in cartesian space, squared (distance formula). */ - _d2: function _d2(a, b) { - var dx = a.x - b.x; - var dy = a.y - b.y; - return Math.pow(dx, 2) + Math.pow(dy, 2); - }, - - /* Takes two latlngs and calculates the angle between them. */ - calculateAngleDelta: function calculateAngleDelta(latlngA, latlngB) { - var overlay = this._handled; - var map = overlay._map; - var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); - var formerPoint = map.latLngToLayerPoint(latlngA); - var newPoint = map.latLngToLayerPoint(latlngB); - var initialAngle = Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x); - var newAngle = Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x); - return newAngle - initialAngle; - } -}); - -/***/ }), - -/***/ "./src/edit/handles/FreeRotateHandle.js": -/*!**********************************************!*\ - !*** ./src/edit/handles/FreeRotateHandle.js ***! - \**********************************************/ -/***/ (function() { - -L.FreeRotateHandle = L.EditHandle.extend({ - options: { - TYPE: 'freeRotate', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - '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 _onHandleDrag() { - var overlay = this._handled; - var map = overlay._map; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - var angle = this.calculateAngleDelta(formerLatLng, newLatLng); - - var scale = this._calculateScalingFactor(formerLatLng, newLatLng); - - if (angle !== 0) { - overlay.rotateBy(angle, 'rad'); - } - - var edgeMinWidth = overlay.edgeMinWidth; - - if (!edgeMinWidth) { - edgeMinWidth = 50; - } - /* just in case */ - - - var corner1 = map.latLngToContainerPoint(overlay.getCorner(0)); - var corner2 = map.latLngToContainerPoint(overlay.getCorner(1)); - var w = Math.abs(corner1.x - corner2.x); - var h = Math.abs(corner1.y - corner2.y); - var distance = Math.sqrt(w * w + h * h); - - if (distance > edgeMinWidth || scale > 1) { - overlay.scaleBy(scale); - } else { - overlay.scaleBy(1); - } - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.freeRotateHandle = function (overlay, idx, options) { - return new L.FreeRotateHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/LockHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/LockHandle.js ***! - \****************************************/ -/***/ (function() { - -L.LockHandle = L.EditHandle.extend({ - options: { - TYPE: 'lock', - interactive: false, - icon: L.icon({ - // eslint-disable-next-line max-len - iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - onRemove: function onRemove(map) { - this.unbindTooltip(); - L.EditHandle.prototype.onRemove.call(this, map); - }, - _bindListeners: function _bindListeners() { - var icon = this.getElement(); - - L.EditHandle.prototype._bindListeners.call(this); - - L.DomEvent.on(icon, { - mousedown: this._tooltipOn, - mouseup: this._tooltipOff - }, this); - L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this); - }, - _unbindListeners: function _unbindListeners() { - var icon = this.getElement(); - - L.EditHandle.prototype._bindListeners.call(this); - - L.DomEvent.off(icon, { - mousedown: this._tooltipOn, - mouseup: this._tooltipOff - }, this); - L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this); - }, - - /* cannot be dragged */ - _onHandleDrag: function _onHandleDrag() {}, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - }, - _tooltipOn: function _tooltipOn(e) { - var eP = this._handled.parentGroup; - var edit = eP ? eP.editing : this._handled.editing; - - if (e.shiftKey) { - return; - } - - if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { - return; - } - - var handlesArr = edit._lockHandles; - this._timer = setTimeout(L.bind(function () { - if (this._timeout) { - clearTimeout(this._timeout); - } - - if (!this.getTooltip()) { - this.bindTooltip('Locked!', { - permanent: true - }); - } else { - handlesArr.eachLayer(function (handle) { - if (this !== handle) { - handle.closeTooltip(); - } - }); - } - - this.openTooltip(); - }, this), 500); - }, - _tooltipOff: function _tooltipOff(e) { - var eP = this._handled.parentGroup; - var edit = eP ? eP.editing : this._handled.editing; - - if (e.shiftKey) { - return; - } - - if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { - return; - } - - var handlesArr = edit._lockHandles; - - if (e.currentTarget === document) { - handlesArr.eachLayer(function (handle) { - handle.closeTooltip(); - }); - } - - if (this._timer) { - clearTimeout(this._timer); - } - - this._timeout = setTimeout(L.bind(function () { - this.closeTooltip(); - }, this), 400); - } -}); - -L.lockHandle = function (overlay, idx, options) { - return new L.LockHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/RotateHandle.js": -/*!******************************************!*\ - !*** ./src/edit/handles/RotateHandle.js ***! - \******************************************/ -/***/ (function() { - -L.RotateHandle = L.EditHandle.extend({ - options: { - TYPE: 'rotate', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - '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 _onHandleDrag() { - var overlay = this._handled; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - var angle = this.calculateAngleDelta(formerLatLng, newLatLng); - /* - * running rotation logic even for an angle delta of 0 - * prevents a small, occasional marker flicker - */ - - overlay.rotateBy(angle, 'rad'); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.rotateHandle = function (overlay, idx, options) { - return new L.RotateHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/ScaleHandle.js": -/*!*****************************************!*\ - !*** ./src/edit/handles/ScaleHandle.js ***! - \*****************************************/ -/***/ (function() { - -L.ScaleHandle = L.EditHandle.extend({ - options: { - TYPE: 'scale', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - var map = overlay._map; - var edgeMinWidth = overlay.edgeMinWidth; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - - var scale = this._calculateScalingFactor(formerLatLng, newLatLng); - /* - * checks whether the "edgeMinWidth" property is set and tracks the minimum edge length; - * this enables preventing scaling to zero, but we might also add an overall scale limit - */ - - - if (!edgeMinWidth) { - edgeMinWidth = 50; - } - /* just in case */ - - - var corner1 = map.latLngToLayerPoint(overlay.getCorner(0)); - var corner2 = map.latLngToLayerPoint(overlay.getCorner(1)); - var w = Math.abs(corner1.x - corner2.x); - var h = Math.abs(corner1.y - corner2.y); - var distance = Math.sqrt(w * w + h * h); - - if (distance > edgeMinWidth || scale > 1) { - overlay.scaleBy(scale); - /* - * running scale logic even for a scale ratio of 1 - * prevents a small, occasional marker flicker - */ - } else { - overlay.scaleBy(1); - } - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.scaleHandle = function (overlay, idx, options) { - return new L.ScaleHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/toolbars/DistortableImage.ControlBar.js": -/*!**********************************************************!*\ - !*** ./src/edit/toolbars/DistortableImage.ControlBar.js ***! - \**********************************************************/ -/***/ (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 (options) { - return new L.DistortableImage.ControlBar(options); -}; -/** addInitHooks run before onAdd */ - - -L.DistortableCollection.addInitHook(function () { - /** Default actions */ - this.ACTIONS = [L.ExportAction, L.DeleteAction, L.LockAction, L.UnlockAction]; // all possible modes - - L.DistortableCollection.Edit.MODES = { - lock: L.LockAction, - unlock: L.UnlockAction - }; - var a = this.options.actions ? this.options.actions : this.ACTIONS; - this.editing = L.distortableCollection.edit(this, { - actions: a - }); -}); - -/***/ }), - -/***/ "./src/edit/toolbars/DistortableImage.PopupBar.js": -/*!********************************************************!*\ - !*** ./src/edit/toolbars/DistortableImage.PopupBar.js ***! - \********************************************************/ -/***/ (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 initialize(latlng, options) { - L.setOptions(this, options); - L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options); - }, - addHooks: function addHooks(map, ov) { - this.map = map; - this.ov = ov; - }, - tools: function tools() { - if (this._ul) { - return this._ul.children; - } - }, - clickTool: function clickTool(name) { - var tools = this.tools(); - - for (var i = 0; i < tools.length; i++) { - var tool = tools.item(i).children[0]; - - if (L.DomUtil.hasClass(tool, name)) { - tool.click(); - return tool; - } - } - - return false; - } -}); - -L.distortableImage.popupBar = function (latlng, options) { - return new L.DistortableImage.PopupBar(latlng, options); -}; - -L.DistortableImageOverlay.addInitHook(function () { - /** Default actions */ - this.ACTIONS = [L.DragAction, L.ScaleAction, L.DistortAction, L.RotateAction, L.FreeRotateAction, L.LockAction, L.OpacityAction, L.BorderAction, L.ExportAction, L.DeleteAction]; // all possible modes - - L.DistortableImage.Edit.MODES = { - drag: L.DragAction, - scale: L.ScaleAction, - distort: L.DistortAction, - rotate: L.RotateAction, - freeRotate: L.FreeRotateAction, - lock: L.LockAction - }; - var a = this.options.actions ? this.options.actions : this.ACTIONS; - this.editing = L.distortableImage.edit(this, { - actions: a - }); -}); - -/***/ }), - -/***/ "./src/iconsets/IconSet.js": -/*!*********************************!*\ - !*** ./src/iconsets/IconSet.js ***! - \*********************************/ -/***/ (function() { - -/* this is the baseclass other IconSets inherit from, -* we don't use it directly */ -L.IconSet = L.Class.extend({ - _svg: '', - _symbols: '', - render: function render() { - this.addSymbols(this._symbols); - return this._svg; - }, - addSymbols: function addSymbols(symbols) { - this._svg += symbols; - } -}); - -/***/ }), - -/***/ "./src/iconsets/KeymapperIconSet.js": -/*!******************************************!*\ - !*** ./src/iconsets/KeymapperIconSet.js ***! - \******************************************/ -/***/ (function() { - -L.KeymapperIconSet = L.IconSet.extend({ - _symbols: // eslint-disable-next-line max-len - '' -}); - -/***/ }), - -/***/ "./src/iconsets/ToolbarIconSet.js": -/*!****************************************!*\ - !*** ./src/iconsets/ToolbarIconSet.js ***! - \****************************************/ -/***/ (function() { - -/* eslint-disable max-len */ -L.ToolbarIconSet = L.IconSet.extend({ - _symbols: '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' -}); - -/***/ }), - -/***/ "./src/mapmixins/BoxCollector.js": -/*!***************************************!*\ - !*** ./src/mapmixins/BoxCollector.js ***! - \***************************************/ -/***/ (function() { - -L.Map.mergeOptions({ - boxCollector: true, - boxZoom: false -}); -/** - * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with - * our `L.DistortableCollection` class instead of a zoom box. - * */ - -L.Map.BoxCollector = L.Map.BoxZoom.extend({ - initialize: function initialize(map) { - this._map = map; - this._container = map._container; - this._pane = map._panes.overlayPane; - this._resetStateTimeout = 0; - map.on('unload', this._destroy, this); - }, - addHooks: function addHooks() { - L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this); - }, - removeHooks: function removeHooks() { - L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this); - }, - moved: function moved() { - return this._moved; - }, - _destroy: function _destroy() { - L.DomUtil.remove(this._pane); - delete this._pane; - }, - _resetState: function _resetState() { - this._resetStateTimeout = 0; - this._moved = false; - }, - _clearDeferredResetState: function _clearDeferredResetState() { - if (this._resetStateTimeout !== 0) { - clearTimeout(this._resetStateTimeout); - this._resetStateTimeout = 0; - } - }, - _onMouseDown: function _onMouseDown(e) { - if (!e.shiftKey || e.which !== 1 && e.button !== 1) { - return false; - } // Clear the deferred resetState if it hasn't executed yet, otherwise it - // will interrupt the interaction and orphan a box element in the container. - - - this._clearDeferredResetState(); - - this._resetState(); - - L.DomUtil.disableTextSelection(); - L.DomUtil.disableImageDrag(); - this._startPoint = this._map.mouseEventToContainerPoint(e); - L.DomEvent.on(document, { - contextmenu: L.DomEvent.stop, - mousemove: this._onMouseMove, - mouseup: this._onMouseUp - }, this); - }, - _onMouseMove: function _onMouseMove(e) { - if (!this._moved) { - this._moved = true; - 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(e); - this._bounds = L.bounds(this._startPoint, this._point); - - var size = this._bounds.getSize(); - - L.DomUtil.setPosition(this._box, this._bounds.min); - this._box.style.width = size.x + 'px'; - this._box.style.height = size.y + 'px'; - }, - _finish: function _finish() { - if (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 _onMouseUp(e) { - if (e.which !== 1 && e.button !== 1) { - return; - } - - this._finish(); - - if (!this._moved) { - return; - } // Postpone to next JS tick so internal click event handling - // still see it as "moved". - - - this._clearDeferredResetState(); - - this._resetStateTimeout = setTimeout(L.Util.bind(this._resetState, this), 0); - var bounds = L.latLngBounds(this._map.containerPointToLatLng(this._bounds.getBottomLeft()), this._map.containerPointToLatLng(this._bounds.getTopRight())); - - var zoom = this._map.getZoom(); - - var center = this._map.getCenter(); // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344 - - - bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center); - - this._map.fire('boxcollectend', { - boxCollectBounds: bounds - }); - } -}); -L.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector); - -/***/ }), - -/***/ "./src/mapmixins/DoubleClickLabels.js": -/*!********************************************!*\ - !*** ./src/mapmixins/DoubleClickLabels.js ***! - \********************************************/ -/***/ (function() { - -L.Map.mergeOptions({ - doubleClickLabels: true -}); -/** - * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant` - * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it. - */ - -L.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({ - enable: function enable() { - var map = this._map; - - if (this._enabled) { - return this; - } // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled. - - - if (map.doubleClickZoom.enabled()) { - map.doubleClickZoom.disable(); - } - - this._map.fire('singleclickon'); - - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - if (!this._enabled) { - return this; - } - - this._enabled = false; - this.removeHooks(); - return this; - }, - _fireIfSingle: function _fireIfSingle(e) { - var map = this._map; - var oe = e.originalEvent; // prevents deselection in case of box selector - - if (oe && oe.shiftKey) { - return; - } - - map._clicked += 1; - this._map._clickTimeout = setTimeout(function () { - if (map._clicked === 1) { - map._clicked = 0; - map.fire('singleclick', { - type: 'singleclick' - }); - } else { - // manually fire doubleclick event only for touch screens that don't natively fire it - if (L.Browser.touch && oe && oe.sourceCapabilities.firesTouchEvents) { - map.fire('dblclick'); - } - } - }, 250); - }, - _onDoubleClick: function _onDoubleClick() { - var map = this._map; - var labels = map._labels; - setTimeout(function () { - map._clicked = 0; - clearTimeout(map._clickTimeout); - }, 0); - - if (!labels) { - return; - } - - if (labels.options.opacity === 1) { - labels.options.opacity = 0; - labels.setOpacity(0); - } else { - labels.options.opacity = 1; - labels.setOpacity(1); - } - } -}); -L.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels); - -/***/ }), - -/***/ "./src/mapmixins/DoubleClickZoom.js": -/*!******************************************!*\ - !*** ./src/mapmixins/DoubleClickZoom.js ***! - \******************************************/ -/***/ (function() { - -/** - * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it - * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`. - * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler - */ -L.Map.DoubleClickZoom.include({ - addHooks: function addHooks() { - this._map.on({ - click: this._fireIfSingle, - dblclick: this._onDoubleClick - }, this); - }, - removeHooks: function removeHooks() { - this._map.off({ - click: this._fireIfSingle, - dblclick: this._onDoubleClick - }, this); - }, - enable: function enable() { - if (this._enabled) { - return this; - } // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first - - - if (this._map.doubleClickLabels) { - if (this._map.doubleClickLabels.enabled()) { - return this; - } - } // signify to collection/instance classes to turn on 'singleclick' listeners - - - this._map.fire('singleclickon'); - - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - if (!this._enabled) { - return this; - } // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners. - - - this._map.fire('singleclickoff'); - - this._enabled = false; - this.removeHooks(); - return this; - }, - _fireIfSingle: function _fireIfSingle(e) { - var map = this._map; - var oe = e.originalEvent; // prevents deselection in case of box selector - - if (oe && oe.shiftKey) { - return; - } - - map._clicked += 1; - this._map._clickTimeout = setTimeout(function () { - if (map._clicked === 1) { - map._clicked = 0; - map.fire('singleclick', { - type: 'singleclick' - }); - } else { - // manually fire doubleclick event only for touch screens that don't natively fire it - if (L.Browser.touch && oe && oe.sourceCapabilities.firesTouchEvents) { - // in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the - // passed "e" (for now). To generate a 'real' DOM event that will have all of its corresponding core - // properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) - map._fireDOMEvent(oe, 'dblclick', [map]); - } - } - }, 250); - }, - _onDoubleClick: function _onDoubleClick(e) { - var map = this._map; - var oe = e.originalEvent; - setTimeout(function () { - map._clicked = 0; - clearTimeout(map._clickTimeout); - }, 0); - - if (!oe) { - return false; - } - - var oldZoom = map.getZoom(); - var delta = map.options.zoomDelta; - var zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta; - - if (map.options.doubleClickZoom === 'center') { - map.setZoom(zoom); - } else { - map.setZoomAround(e.containerPoint, zoom); - } - } -}); - -/***/ }), - -/***/ "./src/mapmixins/MapMixins.js": -/*!************************************!*\ - !*** ./src/mapmixins/MapMixins.js ***! - \************************************/ -/***/ (function() { - -/* eslint-disable max-len */ -L.Map.include({ - _clicked: 0, - addGoogleMutant: function addGoogleMutant(opts) { - var url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}'; - opts = this.mutantOptions = L.extend({ - mutantOpacity: 0.8, - maxZoom: 24, - maxNativeZoom: 20, - minZoom: 0, - labels: true, - labelOpacity: 1, - doubleClickLabels: true - }, opts); - - if (!opts.labels) { - this.mutantOptions = L.extend(this.mutantOptions, { - labelOpacity: opts.labels ? 1 : undefined, - doubleClickLabels: opts.labels ? true : undefined - }); - } - - this._googleMutant = L.tileLayer(url, { - maxZoom: opts.maxZoom, - maxNativeZoom: opts.maxNativeZoom, - minZoom: opts.minZoom, - opacity: opts.mutantOpacity - }).addTo(this); - - if (opts.labels) { - this._addLabels(opts); - } // shouldn't have this handler at all if there are no labels to toggle - else { - this.doubleClickLabels = undefined; - } - - return this; - }, - _addLabels: function _addLabels(opts) { - var url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}'; - - if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) { - opts.labelOpacity = 1; - } - - this._labels = L.tileLayer(url, { - attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors', - subdomains: 'abcd', - interactive: false, - opacity: opts.labelOpacity, - maxZoom: opts.maxZoom, - maxNativeZoom: opts.maxNativeZoom, - minZoom: opts.minZoom, - ext: 'png' - }).addTo(this); - - if (this.mutantOptions.doubleClickLabels) { - this.doubleClickLabels.enable(); - } - - return this; - } -}); // start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead -// during initialization - -L.Map.addInitHook(function () { - this.doubleClickLabels.disable(); - this.doubleClickZoom.enable(); -}); - -/***/ }), - -/***/ "./src/util/DomUtil.js": -/*!*****************************!*\ - !*** ./src/util/DomUtil.js ***! - \*****************************/ -/***/ (function() { - -L.DomUtil = L.extend(L.DomUtil, { - initTranslation: function initTranslation(obj) { - this.translation = obj; - }, - getMatrixString: function getMatrixString(m) { - var is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d; - /* - * Since matrix3d takes a 4*4 matrix, we add in an empty row and column, - * which act as the identity on the z-axis. - * See: - * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ - * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry - */ - - var matrix = [m[0], m[3], 0, m[6], m[1], m[4], 0, m[7], 0, 0, 1, 0, m[2], m[5], 0, m[8]]; - var str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : ''; - - if (!is3d) { - console.log('Your browser must support 3D CSS transforms' + 'in order to use DistortableImageOverlay.'); - } - - return str; - }, - toggleClass: function toggleClass(el, className) { - var c = className; - return this.hasClass(el, c) ? this.removeClass(el, c) : this.addClass(el, c); - }, - confirmDelete: function confirmDelete() { - return window.confirm(this.translation.confirmImageDelete); - }, - confirmDeletes: function confirmDeletes(n) { - if (n === 1) { - return this.confirmDelete(); - } - - var translation = this.translation.confirmImagesDeletes; - var warningMsg = ''; - - if (typeof translation === 'function') { - warningMsg = translation(n); - } else { - warningMsg = translation; - } - - return window.confirm(warningMsg); - } -}); - -/***/ }), - -/***/ "./src/util/IconUtil.js": -/*!******************************!*\ - !*** ./src/util/IconUtil.js ***! - \******************************/ -/***/ (function() { - -L.IconUtil = { - /* creates an svg elemenet with built in accessibility properties - * and standardized classes for styling, takes in the fragment - * identifier (id) of the symbol to reference. note for symplicity - * we allow providing the icon target with or without the '#' prefix - */ - create: function create(ref) { - if (/^#/.test(ref)) { - ref = ref.replace(/^#/, ''); - } - - return '' + '' + ''; - }, - addClassToSvg: function addClassToSvg(container, loader) { - var svg = container.querySelector('svg'); - - if (svg) { - L.DomUtil.addClass(svg, loader); - } - }, - // finds the use element and toggles its icon reference - toggleXlink: function toggleXlink(container, ref1, ref2) { - if (!/^#/.test(ref1)) { - ref1 = '#' + ref1; - } - - if (!/^#/.test(ref2)) { - ref2 = '#' + ref2; - } - - var use = container.querySelector('use'); - - if (use) { - var toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1; - use.setAttribute('xlink:href', toggled); - return toggled; - } - - return false; - }, - toggleTitle: function toggleTitle(container, title1, title2) { - var toggled = container.getAttribute('title') === title1 ? title2 : title1; - container.setAttribute('title', toggled); - - if (container.hasAttribute('aria-label')) { - container.setAttribute('aria-label', toggled); - } - - return toggled; - } -}; - -/***/ }), - -/***/ "./src/util/ImageUtil.js": -/*!*******************************!*\ - !*** ./src/util/ImageUtil.js ***! - \*******************************/ -/***/ (function() { - -L.ImageUtil = { - getCmPerPixel: function getCmPerPixel(overlay) { - var map = overlay._map; - var dist = map.latLngToLayerPoint(overlay.getCorner(0)).distanceTo(map.latLngToLayerPoint(overlay.getCorner(1))); - return dist * 100 / overlay.getElement().width; - } -}; - -/***/ }), - -/***/ "./src/util/MatrixUtil.js": -/*!********************************!*\ - !*** ./src/util/MatrixUtil.js ***! - \********************************/ -/***/ (function() { - -L.MatrixUtil = { - // Compute the adjugate of m - adj: function adj(m) { - return [m[4] * m[8] - m[5] * m[7], m[2] * m[7] - m[1] * m[8], m[1] * m[5] - m[2] * m[4], m[5] * m[6] - m[3] * m[8], m[0] * m[8] - m[2] * m[6], m[2] * m[3] - m[0] * m[5], m[3] * m[7] - m[4] * m[6], m[1] * m[6] - m[0] * m[7], m[0] * m[4] - m[1] * m[3]]; - }, - // multiply two 3*3 matrices - multmm: function multmm(a, b) { - var c = []; - var i; - - for (i = 0; i < 3; i++) { - for (var j = 0; j < 3; j++) { - var cij = 0; - - for (var k = 0; k < 3; k++) { - cij += a[3 * i + k] * b[3 * k + j]; - } - - c[3 * i + j] = cij; - } - } - - return c; - }, - // multiply a 3*3 matrix and a 3-vector - multmv: function multmv(m, v) { - return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; - }, - // multiply a scalar and a 3*3 matrix - multsm: function multsm(s, m) { - var matrix = []; - - for (var i = 0, l = m.length; i < l; i++) { - matrix.push(s * m[i]); - } - - return matrix; - }, - basisToPoints: function basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) { - var m = [x1, x2, x3, y1, y2, y3, 1, 1, 1]; - var v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]); - return L.MatrixUtil.multmm(m, [v[0], 0, 0, 0, v[1], 0, 0, 0, v[2]]); - }, - project: function project(m, x, y) { - var v = L.MatrixUtil.multmv(m, [x, y, 1]); - return [v[0] / v[2], v[1] / v[2]]; - }, - general2DProjection: function general2DProjection(x1s, y1s, x1d, y1d, x2s, y2s, x2d, y2d, x3s, y3s, x3d, y3d, x4s, y4s, x4d, y4d) { - var s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s); - var d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d); - var m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s)); // Normalize to the unique matrix with m[8] == 1. - // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ - - return L.MatrixUtil.multsm(1 / m[8], m); - } -}; - -/***/ }), - -/***/ "./src/util/TrigUtil.js": -/*!******************************!*\ - !*** ./src/util/TrigUtil.js ***! - \******************************/ -/***/ (function() { - -L.TrigUtil = { - calcAngle: function calcAngle(x, y) { - var unit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'deg'; - return unit === 'deg' ? this.radiansToDegrees(Math.atan2(y, x)) : Math.atan2(y, x); - }, - radiansToDegrees: function radiansToDegrees(angle) { - return angle * 180 / Math.PI; - }, - degreesToRadians: function degreesToRadians(angle) { - return angle * Math.PI / 180; - } -}; - -/***/ }), - -/***/ "./src/util/Utils.js": -/*!***************************!*\ - !*** ./src/util/Utils.js ***! - \***************************/ -/***/ (function() { - -L.Utils = { - initTranslation: function initTranslation() { - var translation = { - 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) { - this.options.translation = translation; - } else { - // If the translation for a word is not specified, fallback to English. - for (var key in translation) { - if (!this.options.translation.hasOwnProperty(key)) { - this.options.translation[key] = translation[key]; - } - } - } - - L.DomUtil.initTranslation(this.options.translation); - }, - getNestedVal: function getNestedVal(obj, key, nestedKey) { - var dig = [key, nestedKey]; - return dig.reduce(function (obj, k) { - return obj && obj[k]; - }, obj); - } -}; - -/***/ }), - -/***/ "./node_modules/events/events.js": -/*!***************************************!*\ - !*** ./node_modules/events/events.js ***! - \***************************************/ -/***/ (function(module) { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -var R = typeof Reflect === 'object' ? Reflect : null -var ReflectApply = R && typeof R.apply === 'function' - ? R.apply - : function ReflectApply(target, receiver, args) { - return Function.prototype.apply.call(target, receiver, args); - } - -var ReflectOwnKeys -if (R && typeof R.ownKeys === 'function') { - ReflectOwnKeys = R.ownKeys -} else if (Object.getOwnPropertySymbols) { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target) - .concat(Object.getOwnPropertySymbols(target)); - }; -} else { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target); - }; -} - -function ProcessEmitWarning(warning) { - if (console && console.warn) console.warn(warning); -} - -var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { - return value !== value; -} - -function EventEmitter() { - EventEmitter.init.call(this); -} -module.exports = EventEmitter; -module.exports.once = once; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._eventsCount = 0; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -var defaultMaxListeners = 10; - -function checkListener(listener) { - if (typeof listener !== 'function') { - throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); - } -} - -Object.defineProperty(EventEmitter, 'defaultMaxListeners', { - enumerable: true, - get: function() { - return defaultMaxListeners; - }, - set: function(arg) { - if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { - throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); - } - defaultMaxListeners = arg; - } -}); - -EventEmitter.init = function() { - - if (this._events === undefined || - this._events === Object.getPrototypeOf(this)._events) { - this._events = Object.create(null); - this._eventsCount = 0; - } - - this._maxListeners = this._maxListeners || undefined; -}; - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { - if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { - throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); - } - this._maxListeners = n; - return this; -}; - -function _getMaxListeners(that) { - if (that._maxListeners === undefined) - return EventEmitter.defaultMaxListeners; - return that._maxListeners; -} - -EventEmitter.prototype.getMaxListeners = function getMaxListeners() { - return _getMaxListeners(this); -}; - -EventEmitter.prototype.emit = function emit(type) { - var args = []; - for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); - var doError = (type === 'error'); - - var events = this._events; - if (events !== undefined) - doError = (doError && events.error === undefined); - else if (!doError) - return false; - - // If there is no 'error' event listener then throw. - if (doError) { - var er; - if (args.length > 0) - er = args[0]; - if (er instanceof Error) { - // Note: The comments on the `throw` lines are intentional, they show - // up in Node's output if this results in an unhandled exception. - throw er; // Unhandled 'error' event - } - // At least give some kind of context to the user - var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); - err.context = er; - throw err; // Unhandled 'error' event - } - - var handler = events[type]; - - if (handler === undefined) - return false; - - if (typeof handler === 'function') { - ReflectApply(handler, this, args); - } else { - var len = handler.length; - var listeners = arrayClone(handler, len); - for (var i = 0; i < len; ++i) - ReflectApply(listeners[i], this, args); - } - - return true; -}; - -function _addListener(target, type, listener, prepend) { - var m; - var events; - var existing; - - checkListener(listener); - - events = target._events; - if (events === undefined) { - events = target._events = Object.create(null); - target._eventsCount = 0; - } else { - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (events.newListener !== undefined) { - target.emit('newListener', type, - listener.listener ? listener.listener : listener); - - // Re-assign `events` because a newListener handler could have caused the - // this._events to be assigned to a new object - events = target._events; - } - existing = events[type]; - } - - if (existing === undefined) { - // Optimize the case of one listener. Don't need the extra array object. - existing = events[type] = listener; - ++target._eventsCount; - } else { - if (typeof existing === 'function') { - // Adding the second element, need to change to array. - existing = events[type] = - prepend ? [listener, existing] : [existing, listener]; - // If we've already got an array, just append. - } else if (prepend) { - existing.unshift(listener); - } else { - existing.push(listener); - } - - // Check for listener leak - m = _getMaxListeners(target); - if (m > 0 && existing.length > m && !existing.warned) { - existing.warned = true; - // No error code for this since it is a Warning - // eslint-disable-next-line no-restricted-syntax - var w = new Error('Possible EventEmitter memory leak detected. ' + - existing.length + ' ' + String(type) + ' listeners ' + - 'added. Use emitter.setMaxListeners() to ' + - 'increase limit'); - w.name = 'MaxListenersExceededWarning'; - w.emitter = target; - w.type = type; - w.count = existing.length; - ProcessEmitWarning(w); - } - } - - return target; -} - -EventEmitter.prototype.addListener = function addListener(type, listener) { - return _addListener(this, type, listener, false); -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.prependListener = - function prependListener(type, listener) { - return _addListener(this, type, listener, true); - }; - -function onceWrapper() { - if (!this.fired) { - this.target.removeListener(this.type, this.wrapFn); - this.fired = true; - if (arguments.length === 0) - return this.listener.call(this.target); - return this.listener.apply(this.target, arguments); - } -} - -function _onceWrap(target, type, listener) { - var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; - var wrapped = onceWrapper.bind(state); - wrapped.listener = listener; - state.wrapFn = wrapped; - return wrapped; -} - -EventEmitter.prototype.once = function once(type, listener) { - checkListener(listener); - this.on(type, _onceWrap(this, type, listener)); - return this; -}; - -EventEmitter.prototype.prependOnceListener = - function prependOnceListener(type, listener) { - checkListener(listener); - this.prependListener(type, _onceWrap(this, type, listener)); - return this; - }; - -// Emits a 'removeListener' event if and only if the listener was removed. -EventEmitter.prototype.removeListener = - function removeListener(type, listener) { - var list, events, position, i, originalListener; - - checkListener(listener); - - events = this._events; - if (events === undefined) - return this; - - list = events[type]; - if (list === undefined) - return this; - - if (list === listener || list.listener === listener) { - if (--this._eventsCount === 0) - this._events = Object.create(null); - else { - delete events[type]; - if (events.removeListener) - this.emit('removeListener', type, list.listener || listener); - } - } else if (typeof list !== 'function') { - position = -1; - - for (i = list.length - 1; i >= 0; i--) { - if (list[i] === listener || list[i].listener === listener) { - originalListener = list[i].listener; - position = i; - break; - } - } - - if (position < 0) - return this; - - if (position === 0) - list.shift(); - else { - spliceOne(list, position); - } - - if (list.length === 1) - events[type] = list[0]; - - if (events.removeListener !== undefined) - this.emit('removeListener', type, originalListener || listener); - } - - return this; - }; - -EventEmitter.prototype.off = EventEmitter.prototype.removeListener; - -EventEmitter.prototype.removeAllListeners = - function removeAllListeners(type) { - var listeners, events, i; - - events = this._events; - if (events === undefined) - return this; - - // not listening for removeListener, no need to emit - if (events.removeListener === undefined) { - if (arguments.length === 0) { - this._events = Object.create(null); - this._eventsCount = 0; - } else if (events[type] !== undefined) { - if (--this._eventsCount === 0) - this._events = Object.create(null); - else - delete events[type]; - } - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - var keys = Object.keys(events); - var key; - for (i = 0; i < keys.length; ++i) { - key = keys[i]; - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = Object.create(null); - this._eventsCount = 0; - return this; - } - - listeners = events[type]; - - if (typeof listeners === 'function') { - this.removeListener(type, listeners); - } else if (listeners !== undefined) { - // LIFO order - for (i = listeners.length - 1; i >= 0; i--) { - this.removeListener(type, listeners[i]); - } - } - - return this; - }; - -function _listeners(target, type, unwrap) { - var events = target._events; - - if (events === undefined) - return []; - - var evlistener = events[type]; - if (evlistener === undefined) - return []; - - if (typeof evlistener === 'function') - return unwrap ? [evlistener.listener || evlistener] : [evlistener]; - - return unwrap ? - unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); -} - -EventEmitter.prototype.listeners = function listeners(type) { - return _listeners(this, type, true); -}; - -EventEmitter.prototype.rawListeners = function rawListeners(type) { - return _listeners(this, type, false); -}; - -EventEmitter.listenerCount = function(emitter, type) { - if (typeof emitter.listenerCount === 'function') { - return emitter.listenerCount(type); - } else { - return listenerCount.call(emitter, type); - } -}; - -EventEmitter.prototype.listenerCount = listenerCount; -function listenerCount(type) { - var events = this._events; - - if (events !== undefined) { - var evlistener = events[type]; - - if (typeof evlistener === 'function') { - return 1; - } else if (evlistener !== undefined) { - return evlistener.length; - } - } - - return 0; -} - -EventEmitter.prototype.eventNames = function eventNames() { - return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; -}; - -function arrayClone(arr, n) { - var copy = new Array(n); - for (var i = 0; i < n; ++i) - copy[i] = arr[i]; - return copy; -} - -function spliceOne(list, index) { - for (; index + 1 < list.length; index++) - list[index] = list[index + 1]; - list.pop(); -} - -function unwrapListeners(arr) { - var ret = new Array(arr.length); - for (var i = 0; i < ret.length; ++i) { - ret[i] = arr[i].listener || arr[i]; - } - return ret; -} - -function once(emitter, name) { - return new Promise(function (resolve, reject) { - function errorListener(err) { - emitter.removeListener(name, resolver); - reject(err); - } - - function resolver() { - if (typeof emitter.removeListener === 'function') { - emitter.removeListener('error', errorListener); - } - resolve([].slice.call(arguments)); - }; - - eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); - if (name !== 'error') { - addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); - } - }); -} - -function addErrorHandlerIfEventEmitter(emitter, handler, flags) { - if (typeof emitter.on === 'function') { - eventTargetAgnosticAddListener(emitter, 'error', handler, flags); - } -} - -function eventTargetAgnosticAddListener(emitter, name, listener, flags) { - if (typeof emitter.on === 'function') { - if (flags.once) { - emitter.once(name, listener); - } else { - emitter.on(name, listener); - } - } else if (typeof emitter.addEventListener === 'function') { - // EventTarget does not have `error` event semantics like Node - // EventEmitters, we do not listen for `error` events here. - emitter.addEventListener(name, function wrapListener(arg) { - // IE does not have builtin `{ once: true }` support so we - // have to do it manually. - if (flags.once) { - emitter.removeEventListener(name, wrapListener); - } - listener(arg); - }); - } else { - throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); - } -} - - -/***/ }), - -/***/ "./node_modules/html-entities/lib/index.js": -/*!*************************************************!*\ - !*** ./node_modules/html-entities/lib/index.js ***! - \*************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; - -var __assign = (this && this.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -var named_references_1 = __webpack_require__(/*! ./named-references */ "./node_modules/html-entities/lib/named-references.js"); -var numeric_unicode_map_1 = __webpack_require__(/*! ./numeric-unicode-map */ "./node_modules/html-entities/lib/numeric-unicode-map.js"); -var surrogate_pairs_1 = __webpack_require__(/*! ./surrogate-pairs */ "./node_modules/html-entities/lib/surrogate-pairs.js"); -var allNamedReferences = __assign(__assign({}, named_references_1.namedReferences), { all: named_references_1.namedReferences.html5 }); -var encodeRegExps = { - specialChars: /[<>'"&]/g, - nonAscii: /(?:[<>'"&\u0080-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, - nonAsciiPrintable: /(?:[<>'"&\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, - extensive: /(?:[\x01-\x0c\x0e-\x1f\x21-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7d\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g -}; -var defaultEncodeOptions = { - mode: 'specialChars', - level: 'all', - numeric: 'decimal' -}; -/** Encodes all the necessary (specified by `level`) characters in the text */ -function encode(text, _a) { - var _b = _a === void 0 ? defaultEncodeOptions : _a, _c = _b.mode, mode = _c === void 0 ? 'specialChars' : _c, _d = _b.numeric, numeric = _d === void 0 ? 'decimal' : _d, _e = _b.level, level = _e === void 0 ? 'all' : _e; - if (!text) { - return ''; - } - var encodeRegExp = encodeRegExps[mode]; - var references = allNamedReferences[level].characters; - var isHex = numeric === 'hexadecimal'; - encodeRegExp.lastIndex = 0; - var _b = encodeRegExp.exec(text); - var _c; - if (_b) { - _c = ''; - var _d = 0; - do { - if (_d !== _b.index) { - _c += text.substring(_d, _b.index); - } - var _e = _b[0]; - var result_1 = references[_e]; - if (!result_1) { - var code_1 = _e.length > 1 ? surrogate_pairs_1.getCodePoint(_e, 0) : _e.charCodeAt(0); - result_1 = (isHex ? '&#x' + code_1.toString(16) : '&#' + code_1) + ';'; - } - _c += result_1; - _d = _b.index + _e.length; - } while ((_b = encodeRegExp.exec(text))); - if (_d !== text.length) { - _c += text.substring(_d); - } - } - else { - _c = - text; - } - return _c; -} -exports.encode = encode; -var defaultDecodeOptions = { - scope: 'body', - level: 'all' -}; -var strict = /&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g; -var attribute = /&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g; -var baseDecodeRegExps = { - xml: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.xml - }, - html4: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.html4 - }, - html5: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.html5 - } -}; -var decodeRegExps = __assign(__assign({}, baseDecodeRegExps), { all: baseDecodeRegExps.html5 }); -var fromCharCode = String.fromCharCode; -var outOfBoundsChar = fromCharCode(65533); -var defaultDecodeEntityOptions = { - level: 'all' -}; -/** Decodes a single entity */ -function decodeEntity(entity, _a) { - var _b = (_a === void 0 ? defaultDecodeEntityOptions : _a).level, level = _b === void 0 ? 'all' : _b; - if (!entity) { - return ''; - } - var _b = entity; - var decodeEntityLastChar_1 = entity[entity.length - 1]; - if (false) {} - else if (false) {} - else { - var decodeResultByReference_1 = allNamedReferences[level].entities[entity]; - if (decodeResultByReference_1) { - _b = decodeResultByReference_1; - } - else if (entity[0] === '&' && entity[1] === '#') { - var decodeSecondChar_1 = entity[2]; - var decodeCode_1 = decodeSecondChar_1 == 'x' || decodeSecondChar_1 == 'X' - ? parseInt(entity.substr(3), 16) - : parseInt(entity.substr(2)); - _b = - decodeCode_1 >= 0x10ffff - ? outOfBoundsChar - : decodeCode_1 > 65535 - ? surrogate_pairs_1.fromCodePoint(decodeCode_1) - : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_1] || decodeCode_1); - } - } - return _b; -} -exports.decodeEntity = decodeEntity; -/** Decodes all entities in the text */ -function decode(text, _a) { - var decodeSecondChar_1 = _a === void 0 ? defaultDecodeOptions : _a, decodeCode_1 = decodeSecondChar_1.level, level = decodeCode_1 === void 0 ? 'all' : decodeCode_1, _b = decodeSecondChar_1.scope, scope = _b === void 0 ? level === 'xml' ? 'strict' : 'body' : _b; - if (!text) { - return ''; - } - var decodeRegExp = decodeRegExps[level][scope]; - var references = allNamedReferences[level].entities; - var isAttribute = scope === 'attribute'; - var isStrict = scope === 'strict'; - decodeRegExp.lastIndex = 0; - var replaceMatch_1 = decodeRegExp.exec(text); - var replaceResult_1; - if (replaceMatch_1) { - replaceResult_1 = ''; - var replaceLastIndex_1 = 0; - do { - if (replaceLastIndex_1 !== replaceMatch_1.index) { - replaceResult_1 += text.substring(replaceLastIndex_1, replaceMatch_1.index); - } - var replaceInput_1 = replaceMatch_1[0]; - var decodeResult_1 = replaceInput_1; - var decodeEntityLastChar_2 = replaceInput_1[replaceInput_1.length - 1]; - if (isAttribute - && decodeEntityLastChar_2 === '=') { - decodeResult_1 = replaceInput_1; - } - else if (isStrict - && decodeEntityLastChar_2 !== ';') { - decodeResult_1 = replaceInput_1; - } - else { - var decodeResultByReference_2 = references[replaceInput_1]; - if (decodeResultByReference_2) { - decodeResult_1 = decodeResultByReference_2; - } - else if (replaceInput_1[0] === '&' && replaceInput_1[1] === '#') { - var decodeSecondChar_2 = replaceInput_1[2]; - var decodeCode_2 = decodeSecondChar_2 == 'x' || decodeSecondChar_2 == 'X' - ? parseInt(replaceInput_1.substr(3), 16) - : parseInt(replaceInput_1.substr(2)); - decodeResult_1 = - decodeCode_2 >= 0x10ffff - ? outOfBoundsChar - : decodeCode_2 > 65535 - ? surrogate_pairs_1.fromCodePoint(decodeCode_2) - : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_2] || decodeCode_2); - } - } - replaceResult_1 += decodeResult_1; - replaceLastIndex_1 = replaceMatch_1.index + replaceInput_1.length; - } while ((replaceMatch_1 = decodeRegExp.exec(text))); - if (replaceLastIndex_1 !== text.length) { - replaceResult_1 += text.substring(replaceLastIndex_1); - } - } - else { - replaceResult_1 = - text; - } - return replaceResult_1; -} -exports.decode = decode; - - -/***/ }), - -/***/ "./node_modules/html-entities/lib/named-references.js": -/*!************************************************************!*\ - !*** ./node_modules/html-entities/lib/named-references.js ***! - \************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.bodyRegExps={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g};exports.namedReferences={xml:{entities:{"<":"<",">":">",""":'"',"'":"'","&":"&"},characters:{"<":"<",">":">",'"':""","'":"'","&":"&"}},html4:{entities:{"'":"'"," ":" "," ":" ","¡":"¡","¡":"¡","¢":"¢","¢":"¢","£":"£","£":"£","¤":"¤","¤":"¤","¥":"Â¥","¥":"Â¥","¦":"¦","¦":"¦","§":"§","§":"§","¨":"¨","¨":"¨","©":"©","©":"©","ª":"ª","ª":"ª","«":"«","«":"«","¬":"¬","¬":"¬","­":"­","­":"­","®":"®","®":"®","¯":"¯","¯":"¯","°":"°","°":"°","±":"±","±":"±","²":"²","²":"²","³":"³","³":"³","´":"´","´":"´","µ":"µ","µ":"µ","¶":"¶","¶":"¶","·":"·","·":"·","¸":"¸","¸":"¸","¹":"¹","¹":"¹","º":"º","º":"º","»":"»","»":"»","¼":"¼","¼":"¼","½":"½","½":"½","¾":"¾","¾":"¾","¿":"¿","¿":"¿","À":"À","À":"À","Á":"Ã","Á":"Ã","Â":"Â","Â":"Â","Ã":"Ã","Ã":"Ã","Ä":"Ä","Ä":"Ä","Å":"Ã…","Å":"Ã…","Æ":"Æ","Æ":"Æ","Ç":"Ç","Ç":"Ç","È":"È","È":"È","É":"É","É":"É","Ê":"Ê","Ê":"Ê","Ë":"Ë","Ë":"Ë","Ì":"ÃŒ","Ì":"ÃŒ","Í":"Ã","Í":"Ã","Î":"ÃŽ","Î":"ÃŽ","Ï":"Ã","Ï":"Ã","Ð":"Ã","Ð":"Ã","Ñ":"Ñ","Ñ":"Ñ","Ò":"Ã’","Ò":"Ã’","Ó":"Ó","Ó":"Ó","Ô":"Ô","Ô":"Ô","Õ":"Õ","Õ":"Õ","Ö":"Ö","Ö":"Ö","×":"×","×":"×","Ø":"Ø","Ø":"Ø","Ù":"Ù","Ù":"Ù","Ú":"Ú","Ú":"Ú","Û":"Û","Û":"Û","Ü":"Ü","Ü":"Ü","Ý":"Ã","Ý":"Ã","Þ":"Þ","Þ":"Þ","ß":"ß","ß":"ß","à":"à","à":"à","á":"á","á":"á","â":"â","â":"â","ã":"ã","ã":"ã","ä":"ä","ä":"ä","å":"Ã¥","å":"Ã¥","æ":"æ","æ":"æ","ç":"ç","ç":"ç","è":"è","è":"è","é":"é","é":"é","ê":"ê","ê":"ê","ë":"ë","ë":"ë","ì":"ì","ì":"ì","í":"í","í":"í","î":"î","î":"î","ï":"ï","ï":"ï","ð":"ð","ð":"ð","ñ":"ñ","ñ":"ñ","ò":"ò","ò":"ò","ó":"ó","ó":"ó","ô":"ô","ô":"ô","õ":"õ","õ":"õ","ö":"ö","ö":"ö","÷":"÷","÷":"÷","ø":"ø","ø":"ø","ù":"ù","ù":"ù","ú":"ú","ú":"ú","û":"û","û":"û","ü":"ü","ü":"ü","ý":"ý","ý":"ý","þ":"þ","þ":"þ","ÿ":"ÿ","ÿ":"ÿ",""":'"',""":'"',"&":"&","&":"&","<":"<","<":"<",">":">",">":">","Œ":"Å’","œ":"Å“","Š":"Å ","š":"Å¡","Ÿ":"Ÿ","ˆ":"ˆ","˜":"Ëœ"," ":" "," ":" "," ":" ","‌":"‌","‍":"â€","‎":"‎","‏":"â€","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","”":"â€","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","ƒ":"Æ’","Α":"Α","Β":"Î’","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Ν":"Î","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Υ":"Î¥","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","π":"Ï€","ρ":"Ï","ς":"Ï‚","σ":"σ","τ":"Ï„","υ":"Ï…","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","ϑ":"Ï‘","ϒ":"Ï’","ϖ":"Ï–","•":"•","…":"…","′":"′","″":"″","‾":"‾","⁄":"â„","℘":"℘","ℑ":"â„‘","ℜ":"ℜ","™":"â„¢","ℵ":"ℵ","←":"â†","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","⇐":"â‡","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","∏":"âˆ","∑":"∑","−":"−","∗":"∗","√":"√","∝":"âˆ","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","⋅":"â‹…","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","⟨":"〈","⟩":"〉","◊":"â—Š","♠":"â™ ","♣":"♣","♥":"♥","♦":"♦"},characters:{"'":"'"," ":" ","¡":"¡","¢":"¢","£":"£","¤":"¤","Â¥":"¥","¦":"¦","§":"§","¨":"¨","©":"©","ª":"ª","«":"«","¬":"¬","­":"­","®":"®","¯":"¯","°":"°","±":"±","²":"²","³":"³","´":"´","µ":"µ","¶":"¶","·":"·","¸":"¸","¹":"¹","º":"º","»":"»","¼":"¼","½":"½","¾":"¾","¿":"¿","À":"À","Ã":"Á","Â":"Â","Ã":"Ã","Ä":"Ä","Ã…":"Å","Æ":"Æ","Ç":"Ç","È":"È","É":"É","Ê":"Ê","Ë":"Ë","ÃŒ":"Ì","Ã":"Í","ÃŽ":"Î","Ã":"Ï","Ã":"Ð","Ñ":"Ñ","Ã’":"Ò","Ó":"Ó","Ô":"Ô","Õ":"Õ","Ö":"Ö","×":"×","Ø":"Ø","Ù":"Ù","Ú":"Ú","Û":"Û","Ü":"Ü","Ã":"Ý","Þ":"Þ","ß":"ß","à":"à","á":"á","â":"â","ã":"ã","ä":"ä","Ã¥":"å","æ":"æ","ç":"ç","è":"è","é":"é","ê":"ê","ë":"ë","ì":"ì","í":"í","î":"î","ï":"ï","ð":"ð","ñ":"ñ","ò":"ò","ó":"ó","ô":"ô","õ":"õ","ö":"ö","÷":"÷","ø":"ø","ù":"ù","ú":"ú","û":"û","ü":"ü","ý":"ý","þ":"þ","ÿ":"ÿ",'"':""","&":"&","<":"<",">":">","Å’":"Œ","Å“":"œ","Å ":"Š","Å¡":"š","Ÿ":"Ÿ","ˆ":"ˆ","Ëœ":"˜"," ":" "," ":" "," ":" ","‌":"‌","â€":"‍","‎":"‎","â€":"‏","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","â€":"”","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","Æ’":"ƒ","Α":"Α","Î’":"Β","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Î":"Ν","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Î¥":"Υ","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","Ï€":"π","Ï":"ρ","Ï‚":"ς","σ":"σ","Ï„":"τ","Ï…":"υ","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","Ï‘":"ϑ","Ï’":"ϒ","Ï–":"ϖ","•":"•","…":"…","′":"′","″":"″","‾":"‾","â„":"⁄","℘":"℘","â„‘":"ℑ","ℜ":"ℜ","â„¢":"™","ℵ":"ℵ","â†":"←","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","â‡":"⇐","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","âˆ":"∏","∑":"∑","−":"−","∗":"∗","√":"√","âˆ":"∝","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","â‹…":"⋅","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","〈":"⟨","〉":"⟩","â—Š":"◊","â™ ":"♠","♣":"♣","♥":"♥","♦":"♦"}},html5:{entities:{"Æ":"Æ","Æ":"Æ","&":"&","&":"&","Á":"Ã","Á":"Ã","Ă":"Ä‚","Â":"Â","Â":"Â","А":"Ð","𝔄":"ð”„","À":"À","À":"À","Α":"Α","Ā":"Ä€","⩓":"â©“","Ą":"Ä„","𝔸":"ð”¸","⁡":"â¡","Å":"Ã…","Å":"Ã…","𝒜":"ð’œ","≔":"≔","Ã":"Ã","Ã":"Ã","Ä":"Ä","Ä":"Ä","∖":"∖","⫧":"â«§","⌆":"⌆","Б":"Б","∵":"∵","ℬ":"ℬ","Β":"Î’","𝔅":"ð”…","𝔹":"ð”¹","˘":"˘","ℬ":"ℬ","≎":"≎","Ч":"Ч","©":"©","©":"©","Ć":"Ć","⋒":"â‹’","ⅅ":"â……","ℭ":"â„­","Č":"ÄŒ","Ç":"Ç","Ç":"Ç","Ĉ":"Ĉ","∰":"∰","Ċ":"ÄŠ","¸":"¸","·":"·","ℭ":"â„­","Χ":"Χ","⊙":"⊙","⊖":"⊖","⊕":"⊕","⊗":"⊗","∲":"∲","”":"â€","’":"’","∷":"∷","⩴":"â©´","≡":"≡","∯":"∯","∮":"∮","ℂ":"â„‚","∐":"âˆ","∳":"∳","⨯":"⨯","𝒞":"ð’ž","⋓":"â‹“","≍":"â‰","ⅅ":"â……","⤑":"⤑","Ђ":"Ђ","Ѕ":"Ð…","Џ":"Ð","‡":"‡","↡":"↡","⫤":"⫤","Ď":"ÄŽ","Д":"Д","∇":"∇","Δ":"Δ","𝔇":"ð”‡","´":"´","˙":"Ë™","˝":"Ë","`":"`","˜":"Ëœ","⋄":"â‹„","ⅆ":"â…†","𝔻":"ð”»","¨":"¨","⃜":"⃜","≐":"â‰","∯":"∯","¨":"¨","⇓":"⇓","⇐":"â‡","⇔":"⇔","⫤":"⫤","⟸":"⟸","⟺":"⟺","⟹":"⟹","⇒":"⇒","⊨":"⊨","⇑":"⇑","⇕":"⇕","∥":"∥","↓":"↓","⤓":"⤓","⇵":"⇵","̑":"Ì‘","⥐":"â¥","⥞":"⥞","↽":"↽","⥖":"⥖","⥟":"⥟","⇁":"â‡","⥗":"⥗","⊤":"⊤","↧":"↧","⇓":"⇓","𝒟":"ð’Ÿ","Đ":"Ä","Ŋ":"ÅŠ","Ð":"Ã","Ð":"Ã","É":"É","É":"É","Ě":"Äš","Ê":"Ê","Ê":"Ê","Э":"Э","Ė":"Ä–","𝔈":"ð”ˆ","È":"È","È":"È","∈":"∈","Ē":"Ä’","◻":"â—»","▫":"â–«","Ę":"Ę","𝔼":"ð”¼","Ε":"Ε","⩵":"⩵","≂":"≂","⇌":"⇌","ℰ":"â„°","⩳":"⩳","Η":"Η","Ë":"Ë","Ë":"Ë","∃":"∃","ⅇ":"â…‡","Ф":"Ф","𝔉":"ð”‰","◼":"â—¼","▪":"â–ª","𝔽":"ð”½","∀":"∀","ℱ":"ℱ","ℱ":"ℱ","Ѓ":"Ѓ",">":">",">":">","Γ":"Γ","Ϝ":"Ïœ","Ğ":"Äž","Ģ":"Ä¢","Ĝ":"Äœ","Г":"Г","Ġ":"Ä ","𝔊":"ð”Š","⋙":"â‹™","𝔾":"ð”¾","≥":"≥","⋛":"â‹›","≧":"≧","⪢":"⪢","≷":"≷","⩾":"⩾","≳":"≳","𝒢":"ð’¢","≫":"≫","Ъ":"Ъ","ˇ":"ˇ","^":"^","Ĥ":"Ĥ","ℌ":"ℌ","ℋ":"â„‹","ℍ":"â„","─":"─","ℋ":"â„‹","Ħ":"Ħ","≎":"≎","≏":"â‰","Е":"Е","IJ":"IJ","Ё":"Ð","Í":"Ã","Í":"Ã","Î":"ÃŽ","Î":"ÃŽ","И":"И","İ":"İ","ℑ":"â„‘","Ì":"ÃŒ","Ì":"ÃŒ","ℑ":"â„‘","Ī":"Ī","ⅈ":"â…ˆ","⇒":"⇒","∬":"∬","∫":"∫","⋂":"â‹‚","⁣":"â£","⁢":"â¢","Į":"Ä®","𝕀":"ð•€","Ι":"Ι","ℐ":"â„","Ĩ":"Ĩ","І":"І","Ï":"Ã","Ï":"Ã","Ĵ":"Ä´","Й":"Й","𝔍":"ð”","𝕁":"ð•","𝒥":"ð’¥","Ј":"Ј","Є":"Є","Х":"Ð¥","Ќ":"ÐŒ","Κ":"Κ","Ķ":"Ķ","К":"К","𝔎":"ð”Ž","𝕂":"ð•‚","𝒦":"ð’¦","Љ":"Љ","<":"<","<":"<","Ĺ":"Ĺ","Λ":"Λ","⟪":"⟪","ℒ":"â„’","↞":"↞","Ľ":"Ľ","Ļ":"Ä»","Л":"Л","⟨":"⟨","←":"â†","⇤":"⇤","⇆":"⇆","⌈":"⌈","⟦":"⟦","⥡":"⥡","⇃":"⇃","⥙":"⥙","⌊":"⌊","↔":"↔","⥎":"⥎","⊣":"⊣","↤":"↤","⥚":"⥚","⊲":"⊲","⧏":"â§","⊴":"⊴","⥑":"⥑","⥠":"⥠","↿":"↿","⥘":"⥘","↼":"↼","⥒":"⥒","⇐":"â‡","⇔":"⇔","⋚":"⋚","≦":"≦","≶":"≶","⪡":"⪡","⩽":"⩽","≲":"≲","𝔏":"ð”","⋘":"⋘","⇚":"⇚","Ŀ":"Ä¿","⟵":"⟵","⟷":"⟷","⟶":"⟶","⟸":"⟸","⟺":"⟺","⟹":"⟹","𝕃":"ð•ƒ","↙":"↙","↘":"↘","ℒ":"â„’","↰":"↰","Ł":"Å","≪":"≪","⤅":"⤅","М":"М"," ":"âŸ","ℳ":"ℳ","𝔐":"ð”","∓":"∓","𝕄":"ð•„","ℳ":"ℳ","Μ":"Μ","Њ":"Њ","Ń":"Ń","Ň":"Ň","Ņ":"Å…","Н":"Ð","​":"​","​":"​","​":"​","​":"​","≫":"≫","≪":"≪"," ":"\n","𝔑":"ð”‘","⁠":"â "," ":" ","ℕ":"â„•","⫬":"⫬","≢":"≢","≭":"≭","∦":"∦","∉":"∉","≠":"≠","≂̸":"≂̸","∄":"∄","≯":"≯","≱":"≱","≧̸":"≧̸","≫̸":"≫̸","≹":"≹","⩾̸":"⩾̸","≵":"≵","≎̸":"≎̸","≏̸":"â‰Ì¸","⋪":"⋪","⧏̸":"â§Ì¸","⋬":"⋬","≮":"≮","≰":"≰","≸":"≸","≪̸":"≪̸","⩽̸":"⩽̸","≴":"≴","⪢̸":"⪢̸","⪡̸":"⪡̸","⊀":"⊀","⪯̸":"⪯̸","⋠":"â‹ ","∌":"∌","⋫":"â‹«","⧐̸":"â§Ì¸","⋭":"â‹­","⊏̸":"âŠÌ¸","⋢":"â‹¢","⊐̸":"âŠÌ¸","⋣":"â‹£","⊂⃒":"⊂⃒","⊈":"⊈","⊁":"âŠ","⪰̸":"⪰̸","⋡":"â‹¡","≿̸":"≿̸","⊃⃒":"⊃⃒","⊉":"⊉","≁":"â‰","≄":"≄","≇":"≇","≉":"≉","∤":"∤","𝒩":"ð’©","Ñ":"Ñ","Ñ":"Ñ","Ν":"Î","Œ":"Å’","Ó":"Ó","Ó":"Ó","Ô":"Ô","Ô":"Ô","О":"О","Ő":"Å","𝔒":"ð”’","Ò":"Ã’","Ò":"Ã’","Ō":"ÅŒ","Ω":"Ω","Ο":"Ο","𝕆":"ð•†","“":"“","‘":"‘","⩔":"â©”","𝒪":"ð’ª","Ø":"Ø","Ø":"Ø","Õ":"Õ","Õ":"Õ","⨷":"⨷","Ö":"Ö","Ö":"Ö","‾":"‾","⏞":"âž","⎴":"⎴","⏜":"âœ","∂":"∂","П":"П","𝔓":"ð”“","Φ":"Φ","Π":"Π","±":"±","ℌ":"ℌ","ℙ":"â„™","⪻":"⪻","≺":"≺","⪯":"⪯","≼":"≼","≾":"≾","″":"″","∏":"âˆ","∷":"∷","∝":"âˆ","𝒫":"ð’«","Ψ":"Ψ",""":'"',""":'"',"𝔔":"ð””","ℚ":"ℚ","𝒬":"ð’¬","⤐":"â¤","®":"®","®":"®","Ŕ":"Å”","⟫":"⟫","↠":"↠","⤖":"⤖","Ř":"Ř","Ŗ":"Å–","Р":"Р","ℜ":"ℜ","∋":"∋","⇋":"⇋","⥯":"⥯","ℜ":"ℜ","Ρ":"Ρ","⟩":"⟩","→":"→","⇥":"⇥","⇄":"⇄","⌉":"⌉","⟧":"⟧","⥝":"â¥","⇂":"⇂","⥕":"⥕","⌋":"⌋","⊢":"⊢","↦":"↦","⥛":"⥛","⊳":"⊳","⧐":"â§","⊵":"⊵","⥏":"â¥","⥜":"⥜","↾":"↾","⥔":"⥔","⇀":"⇀","⥓":"⥓","⇒":"⇒","ℝ":"â„","⥰":"⥰","⇛":"⇛","ℛ":"â„›","↱":"↱","⧴":"â§´","Щ":"Щ","Ш":"Ш","Ь":"Ь","Ś":"Åš","⪼":"⪼","Š":"Å ","Ş":"Åž","Ŝ":"Åœ","С":"С","𝔖":"ð”–","↓":"↓","←":"â†","→":"→","↑":"↑","Σ":"Σ","∘":"∘","𝕊":"ð•Š","√":"√","□":"â–¡","⊓":"⊓","⊏":"âŠ","⊑":"⊑","⊐":"âŠ","⊒":"⊒","⊔":"⊔","𝒮":"ð’®","⋆":"⋆","⋐":"â‹","⋐":"â‹","⊆":"⊆","≻":"≻","⪰":"⪰","≽":"≽","≿":"≿","∋":"∋","∑":"∑","⋑":"â‹‘","⊃":"⊃","⊇":"⊇","⋑":"â‹‘","Þ":"Þ","Þ":"Þ","™":"â„¢","Ћ":"Ћ","Ц":"Ц"," ":"\t","Τ":"Τ","Ť":"Ť","Ţ":"Å¢","Т":"Т","𝔗":"ð”—","∴":"∴","Θ":"Θ","  ":"âŸâ€Š"," ":" ","∼":"∼","≃":"≃","≅":"≅","≈":"≈","𝕋":"ð•‹","⃛":"⃛","𝒯":"ð’¯","Ŧ":"Ŧ","Ú":"Ú","Ú":"Ú","↟":"↟","⥉":"⥉","Ў":"ÐŽ","Ŭ":"Ŭ","Û":"Û","Û":"Û","У":"У","Ű":"Ű","𝔘":"ð”˜","Ù":"Ù","Ù":"Ù","Ū":"Ū","_":"_","⏟":"âŸ","⎵":"⎵","⏝":"â","⋃":"⋃","⊎":"⊎","Ų":"Ų","𝕌":"ð•Œ","↑":"↑","⤒":"⤒","⇅":"⇅","↕":"↕","⥮":"⥮","⊥":"⊥","↥":"↥","⇑":"⇑","⇕":"⇕","↖":"↖","↗":"↗","ϒ":"Ï’","Υ":"Î¥","Ů":"Å®","𝒰":"ð’°","Ũ":"Ũ","Ü":"Ü","Ü":"Ü","⊫":"⊫","⫫":"â««","В":"Ð’","⊩":"⊩","⫦":"⫦","⋁":"â‹","‖":"‖","‖":"‖","∣":"∣","|":"|","❘":"â˜","≀":"≀"," ":" ","𝔙":"ð”™","𝕍":"ð•","𝒱":"ð’±","⊪":"⊪","Ŵ":"Å´","⋀":"â‹€","𝔚":"ð”š","𝕎":"ð•Ž","𝒲":"ð’²","𝔛":"ð”›","Ξ":"Ξ","𝕏":"ð•","𝒳":"ð’³","Я":"Я","Ї":"Ї","Ю":"Ю","Ý":"Ã","Ý":"Ã","Ŷ":"Ŷ","Ы":"Ы","𝔜":"ð”œ","𝕐":"ð•","𝒴":"ð’´","Ÿ":"Ÿ","Ж":"Ж","Ź":"Ź","Ž":"Ž","З":"З","Ż":"Å»","​":"​","Ζ":"Ζ","ℨ":"ℨ","ℤ":"ℤ","𝒵":"ð’µ","á":"á","á":"á","ă":"ă","∾":"∾","∾̳":"∾̳","∿":"∿","â":"â","â":"â","´":"´","´":"´","а":"а","æ":"æ","æ":"æ","⁡":"â¡","𝔞":"ð”ž","à":"à","à":"à","ℵ":"ℵ","ℵ":"ℵ","α":"α","ā":"Ä","⨿":"⨿","&":"&","&":"&","∧":"∧","⩕":"â©•","⩜":"⩜","⩘":"⩘","⩚":"⩚","∠":"∠","⦤":"⦤","∠":"∠","∡":"∡","⦨":"⦨","⦩":"⦩","⦪":"⦪","⦫":"⦫","⦬":"⦬","⦭":"⦭","⦮":"⦮","⦯":"⦯","∟":"∟","⊾":"⊾","⦝":"â¦","∢":"∢","Å":"Ã…","⍼":"â¼","ą":"Ä…","𝕒":"ð•’","≈":"≈","⩰":"â©°","⩯":"⩯","≊":"≊","≋":"≋","'":"'","≈":"≈","≊":"≊","å":"Ã¥","å":"Ã¥","𝒶":"ð’¶","*":"*","≈":"≈","≍":"â‰","ã":"ã","ã":"ã","ä":"ä","ä":"ä","∳":"∳","⨑":"⨑","⫭":"â«­","≌":"≌","϶":"϶","‵":"‵","∽":"∽","⋍":"â‹","⊽":"⊽","⌅":"⌅","⌅":"⌅","⎵":"⎵","⎶":"⎶","≌":"≌","б":"б","„":"„","∵":"∵","∵":"∵","⦰":"⦰","϶":"϶","ℬ":"ℬ","β":"β","ℶ":"â„¶","≬":"≬","𝔟":"ð”Ÿ","⋂":"â‹‚","◯":"â—¯","⋃":"⋃","⨀":"⨀","⨁":"â¨","⨂":"⨂","⨆":"⨆","★":"★","▽":"â–½","△":"â–³","⨄":"⨄","⋁":"â‹","⋀":"â‹€","⤍":"â¤","⧫":"â§«","▪":"â–ª","▴":"â–´","▾":"â–¾","◂":"â—‚","▸":"â–¸","␣":"â£","▒":"â–’","░":"â–‘","▓":"â–“","█":"â–ˆ","=⃥":"=⃥","≡⃥":"≡⃥","⌐":"âŒ","𝕓":"ð•“","⊥":"⊥","⊥":"⊥","⋈":"⋈","╗":"â•—","╔":"â•”","╖":"â•–","╓":"â•“","═":"â•","╦":"╦","╩":"â•©","╤":"╤","╧":"â•§","╝":"â•","╚":"╚","╜":"╜","╙":"â•™","║":"â•‘","╬":"╬","╣":"â•£","╠":"â• ","╫":"â•«","╢":"â•¢","╟":"╟","⧉":"⧉","╕":"â••","╒":"â•’","┐":"â”","┌":"┌","─":"─","╥":"â•¥","╨":"╨","┬":"┬","┴":"â”´","⊟":"⊟","⊞":"⊞","⊠":"⊠","╛":"â•›","╘":"╘","┘":"┘","└":"â””","│":"│","╪":"╪","╡":"â•¡","╞":"╞","┼":"┼","┤":"┤","├":"├","‵":"‵","˘":"˘","¦":"¦","¦":"¦","𝒷":"ð’·","⁏":"â","∽":"∽","⋍":"â‹","\":"\\","⧅":"â§…","⟈":"⟈","•":"•","•":"•","≎":"≎","⪮":"⪮","≏":"â‰","≏":"â‰","ć":"ć","∩":"∩","⩄":"â©„","⩉":"⩉","⩋":"â©‹","⩇":"⩇","⩀":"â©€","∩︀":"∩︀","⁁":"â","ˇ":"ˇ","⩍":"â©","č":"Ä","ç":"ç","ç":"ç","ĉ":"ĉ","⩌":"⩌","⩐":"â©","ċ":"Ä‹","¸":"¸","¸":"¸","⦲":"⦲","¢":"¢","¢":"¢","·":"·","𝔠":"ð” ","ч":"ч","✓":"✓","✓":"✓","χ":"χ","○":"â—‹","⧃":"⧃","ˆ":"ˆ","≗":"≗","↺":"↺","↻":"↻","®":"®","Ⓢ":"Ⓢ","⊛":"⊛","⊚":"⊚","⊝":"âŠ","≗":"≗","⨐":"â¨","⫯":"⫯","⧂":"â§‚","♣":"♣","♣":"♣",":":":","≔":"≔","≔":"≔",",":",","@":"@","∁":"âˆ","∘":"∘","∁":"âˆ","ℂ":"â„‚","≅":"≅","⩭":"â©­","∮":"∮","𝕔":"ð•”","∐":"âˆ","©":"©","©":"©","℗":"â„—","↵":"↵","✗":"✗","𝒸":"ð’¸","⫏":"â«","⫑":"â«‘","⫐":"â«","⫒":"â«’","⋯":"⋯","⤸":"⤸","⤵":"⤵","⋞":"⋞","⋟":"⋟","↶":"↶","⤽":"⤽","∪":"∪","⩈":"⩈","⩆":"⩆","⩊":"⩊","⊍":"âŠ","⩅":"â©…","∪︀":"∪︀","↷":"↷","⤼":"⤼","⋞":"⋞","⋟":"⋟","⋎":"⋎","⋏":"â‹","¤":"¤","¤":"¤","↶":"↶","↷":"↷","⋎":"⋎","⋏":"â‹","∲":"∲","∱":"∱","⌭":"⌭","⇓":"⇓","⥥":"⥥","†":"†","ℸ":"ℸ","↓":"↓","‐":"â€","⊣":"⊣","⤏":"â¤","˝":"Ë","ď":"Ä","д":"д","ⅆ":"â…†","‡":"‡","⇊":"⇊","⩷":"â©·","°":"°","°":"°","δ":"δ","⦱":"⦱","⥿":"⥿","𝔡":"ð”¡","⇃":"⇃","⇂":"⇂","⋄":"â‹„","⋄":"â‹„","♦":"♦","♦":"♦","¨":"¨","ϝ":"Ï","⋲":"⋲","÷":"÷","÷":"÷","÷":"÷","⋇":"⋇","⋇":"⋇","ђ":"Ñ’","⌞":"⌞","⌍":"âŒ","$":"$","𝕕":"ð••","˙":"Ë™","≐":"â‰","≑":"≑","∸":"∸","∔":"∔","⊡":"⊡","⌆":"⌆","↓":"↓","⇊":"⇊","⇃":"⇃","⇂":"⇂","⤐":"â¤","⌟":"⌟","⌌":"⌌","𝒹":"ð’¹","ѕ":"Ñ•","⧶":"â§¶","đ":"Ä‘","⋱":"⋱","▿":"â–¿","▾":"â–¾","⇵":"⇵","⥯":"⥯","⦦":"⦦","џ":"ÑŸ","⟿":"⟿","⩷":"â©·","≑":"≑","é":"é","é":"é","⩮":"â©®","ě":"Ä›","≖":"≖","ê":"ê","ê":"ê","≕":"≕","э":"Ñ","ė":"Ä—","ⅇ":"â…‡","≒":"≒","𝔢":"ð”¢","⪚":"⪚","è":"è","è":"è","⪖":"⪖","⪘":"⪘","⪙":"⪙","⏧":"â§","ℓ":"â„“","⪕":"⪕","⪗":"⪗","ē":"Ä“","∅":"∅","∅":"∅","∅":"∅"," ":" "," ":" "," ":" ","ŋ":"Å‹"," ":" ","ę":"Ä™","𝕖":"ð•–","⋕":"â‹•","⧣":"â§£","⩱":"⩱","ε":"ε","ε":"ε","ϵ":"ϵ","≖":"≖","≕":"≕","≂":"≂","⪖":"⪖","⪕":"⪕","=":"=","≟":"≟","≡":"≡","⩸":"⩸","⧥":"â§¥","≓":"≓","⥱":"⥱","ℯ":"ℯ","≐":"â‰","≂":"≂","η":"η","ð":"ð","ð":"ð","ë":"ë","ë":"ë","€":"€","!":"!","∃":"∃","ℰ":"â„°","ⅇ":"â…‡","≒":"≒","ф":"Ñ„","♀":"♀","ffi":"ffi","ff":"ff","ffl":"ffl","𝔣":"ð”£","fi":"ï¬","fj":"fj","♭":"â™­","fl":"fl","▱":"â–±","ƒ":"Æ’","𝕗":"ð•—","∀":"∀","⋔":"â‹”","⫙":"â«™","⨍":"â¨","½":"½","½":"½","⅓":"â…“","¼":"¼","¼":"¼","⅕":"â…•","⅙":"â…™","⅛":"â…›","⅔":"â…”","⅖":"â…–","¾":"¾","¾":"¾","⅗":"â…—","⅜":"â…œ","⅘":"â…˜","⅚":"â…š","⅝":"â…","⅞":"â…ž","⁄":"â„","⌢":"⌢","𝒻":"ð’»","≧":"≧","⪌":"⪌","ǵ":"ǵ","γ":"γ","ϝ":"Ï","⪆":"⪆","ğ":"ÄŸ","ĝ":"Ä","г":"г","ġ":"Ä¡","≥":"≥","⋛":"â‹›","≥":"≥","≧":"≧","⩾":"⩾","⩾":"⩾","⪩":"⪩","⪀":"⪀","⪂":"⪂","⪄":"⪄","⋛︀":"⋛︀","⪔":"⪔","𝔤":"ð”¤","≫":"≫","⋙":"â‹™","ℷ":"â„·","ѓ":"Ñ“","≷":"≷","⪒":"⪒","⪥":"⪥","⪤":"⪤","≩":"≩","⪊":"⪊","⪊":"⪊","⪈":"⪈","⪈":"⪈","≩":"≩","⋧":"â‹§","𝕘":"ð•˜","`":"`","ℊ":"ℊ","≳":"≳","⪎":"⪎","⪐":"âª",">":">",">":">","⪧":"⪧","⩺":"⩺","⋗":"â‹—","⦕":"⦕","⩼":"⩼","⪆":"⪆","⥸":"⥸","⋗":"â‹—","⋛":"â‹›","⪌":"⪌","≷":"≷","≳":"≳","≩︀":"≩︀","≩︀":"≩︀","⇔":"⇔"," ":" ","½":"½","ℋ":"â„‹","ъ":"ÑŠ","↔":"↔","⥈":"⥈","↭":"↭","ℏ":"â„","ĥ":"Ä¥","♥":"♥","♥":"♥","…":"…","⊹":"⊹","𝔥":"ð”¥","⤥":"⤥","⤦":"⤦","⇿":"⇿","∻":"∻","↩":"↩","↪":"↪","𝕙":"ð•™","―":"―","𝒽":"ð’½","ℏ":"â„","ħ":"ħ","⁃":"âƒ","‐":"â€","í":"í","í":"í","⁣":"â£","î":"î","î":"î","и":"и","е":"е","¡":"¡","¡":"¡","⇔":"⇔","𝔦":"ð”¦","ì":"ì","ì":"ì","ⅈ":"â…ˆ","⨌":"⨌","∭":"∭","⧜":"â§œ","℩":"â„©","ij":"ij","ī":"Ä«","ℑ":"â„‘","ℐ":"â„","ℑ":"â„‘","ı":"ı","⊷":"⊷","Ƶ":"Ƶ","∈":"∈","℅":"â„…","∞":"∞","⧝":"â§","ı":"ı","∫":"∫","⊺":"⊺","ℤ":"ℤ","⊺":"⊺","⨗":"⨗","⨼":"⨼","ё":"Ñ‘","į":"į","𝕚":"ð•š","ι":"ι","⨼":"⨼","¿":"¿","¿":"¿","𝒾":"ð’¾","∈":"∈","⋹":"⋹","⋵":"⋵","⋴":"â‹´","⋳":"⋳","∈":"∈","⁢":"â¢","ĩ":"Ä©","і":"Ñ–","ï":"ï","ï":"ï","ĵ":"ĵ","й":"й","𝔧":"ð”§","ȷ":"È·","𝕛":"ð•›","𝒿":"ð’¿","ј":"ј","є":"Ñ”","κ":"κ","ϰ":"ϰ","ķ":"Ä·","к":"к","𝔨":"ð”¨","ĸ":"ĸ","х":"Ñ…","ќ":"Ñœ","𝕜":"ð•œ","𝓀":"ð“€","⇚":"⇚","⇐":"â‡","⤛":"⤛","⤎":"⤎","≦":"≦","⪋":"⪋","⥢":"⥢","ĺ":"ĺ","⦴":"⦴","ℒ":"â„’","λ":"λ","⟨":"⟨","⦑":"⦑","⟨":"⟨","⪅":"⪅","«":"«","«":"«","←":"â†","⇤":"⇤","⤟":"⤟","⤝":"â¤","↩":"↩","↫":"↫","⤹":"⤹","⥳":"⥳","↢":"↢","⪫":"⪫","⤙":"⤙","⪭":"⪭","⪭︀":"⪭︀","⤌":"⤌","❲":"â²","{":"{","[":"[","⦋":"⦋","⦏":"â¦","⦍":"â¦","ľ":"ľ","ļ":"ļ","⌈":"⌈","{":"{","л":"л","⤶":"⤶","“":"“","„":"„","⥧":"⥧","⥋":"⥋","↲":"↲","≤":"≤","←":"â†","↢":"↢","↽":"↽","↼":"↼","⇇":"⇇","↔":"↔","⇆":"⇆","⇋":"⇋","↭":"↭","⋋":"â‹‹","⋚":"⋚","≤":"≤","≦":"≦","⩽":"⩽","⩽":"⩽","⪨":"⪨","⩿":"â©¿","⪁":"âª","⪃":"⪃","⋚︀":"⋚︀","⪓":"⪓","⪅":"⪅","⋖":"â‹–","⋚":"⋚","⪋":"⪋","≶":"≶","≲":"≲","⥼":"⥼","⌊":"⌊","𝔩":"ð”©","≶":"≶","⪑":"⪑","↽":"↽","↼":"↼","⥪":"⥪","▄":"â–„","љ":"Ñ™","≪":"≪","⇇":"⇇","⌞":"⌞","⥫":"⥫","◺":"â—º","ŀ":"Å€","⎰":"⎰","⎰":"⎰","≨":"≨","⪉":"⪉","⪉":"⪉","⪇":"⪇","⪇":"⪇","≨":"≨","⋦":"⋦","⟬":"⟬","⇽":"⇽","⟦":"⟦","⟵":"⟵","⟷":"⟷","⟼":"⟼","⟶":"⟶","↫":"↫","↬":"↬","⦅":"⦅","𝕝":"ð•","⨭":"⨭","⨴":"⨴","∗":"∗","_":"_","◊":"â—Š","◊":"â—Š","⧫":"â§«","(":"(","⦓":"⦓","⇆":"⇆","⌟":"⌟","⇋":"⇋","⥭":"⥭","‎":"‎","⊿":"⊿","‹":"‹","𝓁":"ð“","↰":"↰","≲":"≲","⪍":"âª","⪏":"âª","[":"[","‘":"‘","‚":"‚","ł":"Å‚","<":"<","<":"<","⪦":"⪦","⩹":"⩹","⋖":"â‹–","⋋":"â‹‹","⋉":"⋉","⥶":"⥶","⩻":"â©»","⦖":"⦖","◃":"â—ƒ","⊴":"⊴","◂":"â—‚","⥊":"⥊","⥦":"⥦","≨︀":"≨︀","≨︀":"≨︀","∺":"∺","¯":"¯","¯":"¯","♂":"♂","✠":"✠","✠":"✠","↦":"↦","↦":"↦","↧":"↧","↤":"↤","↥":"↥","▮":"â–®","⨩":"⨩","м":"м","—":"—","∡":"∡","𝔪":"ð”ª","℧":"â„§","µ":"µ","µ":"µ","∣":"∣","*":"*","⫰":"â«°","·":"·","·":"·","−":"−","⊟":"⊟","∸":"∸","⨪":"⨪","⫛":"â«›","…":"…","∓":"∓","⊧":"⊧","𝕞":"ð•ž","∓":"∓","𝓂":"ð“‚","∾":"∾","μ":"μ","⊸":"⊸","⊸":"⊸","⋙̸":"⋙̸","≫⃒":"≫⃒","≫̸":"≫̸","⇍":"â‡","⇎":"⇎","⋘̸":"⋘̸","≪⃒":"≪⃒","≪̸":"≪̸","⇏":"â‡","⊯":"⊯","⊮":"⊮","∇":"∇","ń":"Å„","∠⃒":"∠⃒","≉":"≉","⩰̸":"⩰̸","≋̸":"≋̸","ʼn":"ʼn","≉":"≉","♮":"â™®","♮":"â™®","ℕ":"â„•"," ":" "," ":" ","≎̸":"≎̸","≏̸":"â‰Ì¸","⩃":"⩃","ň":"ň","ņ":"ņ","≇":"≇","⩭̸":"⩭̸","⩂":"â©‚","н":"н","–":"–","≠":"≠","⇗":"⇗","⤤":"⤤","↗":"↗","↗":"↗","≐̸":"â‰Ì¸","≢":"≢","⤨":"⤨","≂̸":"≂̸","∄":"∄","∄":"∄","𝔫":"ð”«","≧̸":"≧̸","≱":"≱","≱":"≱","≧̸":"≧̸","⩾̸":"⩾̸","⩾̸":"⩾̸","≵":"≵","≯":"≯","≯":"≯","⇎":"⇎","↮":"↮","⫲":"⫲","∋":"∋","⋼":"⋼","⋺":"⋺","∋":"∋","њ":"Ñš","⇍":"â‡","≦̸":"≦̸","↚":"↚","‥":"‥","≰":"≰","↚":"↚","↮":"↮","≰":"≰","≦̸":"≦̸","⩽̸":"⩽̸","⩽̸":"⩽̸","≮":"≮","≴":"≴","≮":"≮","⋪":"⋪","⋬":"⋬","∤":"∤","𝕟":"ð•Ÿ","¬":"¬","¬":"¬","∉":"∉","⋹̸":"⋹̸","⋵̸":"⋵̸","∉":"∉","⋷":"â‹·","⋶":"â‹¶","∌":"∌","∌":"∌","⋾":"⋾","⋽":"⋽","∦":"∦","∦":"∦","⫽⃥":"⫽⃥","∂̸":"∂̸","⨔":"⨔","⊀":"⊀","⋠":"â‹ ","⪯̸":"⪯̸","⊀":"⊀","⪯̸":"⪯̸","⇏":"â‡","↛":"↛","⤳̸":"⤳̸","↝̸":"â†Ì¸","↛":"↛","⋫":"â‹«","⋭":"â‹­","⊁":"âŠ","⋡":"â‹¡","⪰̸":"⪰̸","𝓃":"ð“ƒ","∤":"∤","∦":"∦","≁":"â‰","≄":"≄","≄":"≄","∤":"∤","∦":"∦","⋢":"â‹¢","⋣":"â‹£","⊄":"⊄","⫅̸":"⫅̸","⊈":"⊈","⊂⃒":"⊂⃒","⊈":"⊈","⫅̸":"⫅̸","⊁":"âŠ","⪰̸":"⪰̸","⊅":"⊅","⫆̸":"⫆̸","⊉":"⊉","⊃⃒":"⊃⃒","⊉":"⊉","⫆̸":"⫆̸","≹":"≹","ñ":"ñ","ñ":"ñ","≸":"≸","⋪":"⋪","⋬":"⋬","⋫":"â‹«","⋭":"â‹­","ν":"ν","#":"#","№":"â„–"," ":" ","⊭":"⊭","⤄":"⤄","≍⃒":"â‰âƒ’","⊬":"⊬","≥⃒":"≥⃒",">⃒":">⃒","⧞":"â§ž","⤂":"⤂","≤⃒":"≤⃒","<⃒":"<⃒","⊴⃒":"⊴⃒","⤃":"⤃","⊵⃒":"⊵⃒","∼⃒":"∼⃒","⇖":"⇖","⤣":"⤣","↖":"↖","↖":"↖","⤧":"⤧","Ⓢ":"Ⓢ","ó":"ó","ó":"ó","⊛":"⊛","⊚":"⊚","ô":"ô","ô":"ô","о":"о","⊝":"âŠ","ő":"Å‘","⨸":"⨸","⊙":"⊙","⦼":"⦼","œ":"Å“","⦿":"⦿","𝔬":"ð”¬","˛":"Ë›","ò":"ò","ò":"ò","⧁":"â§","⦵":"⦵","Ω":"Ω","∮":"∮","↺":"↺","⦾":"⦾","⦻":"⦻","‾":"‾","⧀":"â§€","ō":"Å","ω":"ω","ο":"ο","⦶":"⦶","⊖":"⊖","𝕠":"ð• ","⦷":"⦷","⦹":"⦹","⊕":"⊕","∨":"∨","↻":"↻","⩝":"â©","ℴ":"â„´","ℴ":"â„´","ª":"ª","ª":"ª","º":"º","º":"º","⊶":"⊶","⩖":"â©–","⩗":"â©—","⩛":"â©›","ℴ":"â„´","ø":"ø","ø":"ø","⊘":"⊘","õ":"õ","õ":"õ","⊗":"⊗","⨶":"⨶","ö":"ö","ö":"ö","⌽":"⌽","∥":"∥","¶":"¶","¶":"¶","∥":"∥","⫳":"⫳","⫽":"⫽","∂":"∂","п":"п","%":"%",".":".","‰":"‰","⊥":"⊥","‱":"‱","𝔭":"ð”­","φ":"φ","ϕ":"Ï•","ℳ":"ℳ","☎":"☎","π":"Ï€","⋔":"â‹”","ϖ":"Ï–","ℏ":"â„","ℎ":"ℎ","ℏ":"â„","+":"+","⨣":"⨣","⊞":"⊞","⨢":"⨢","∔":"∔","⨥":"⨥","⩲":"⩲","±":"±","±":"±","⨦":"⨦","⨧":"⨧","±":"±","⨕":"⨕","𝕡":"ð•¡","£":"£","£":"£","≺":"≺","⪳":"⪳","⪷":"⪷","≼":"≼","⪯":"⪯","≺":"≺","⪷":"⪷","≼":"≼","⪯":"⪯","⪹":"⪹","⪵":"⪵","⋨":"⋨","≾":"≾","′":"′","ℙ":"â„™","⪵":"⪵","⪹":"⪹","⋨":"⋨","∏":"âˆ","⌮":"⌮","⌒":"⌒","⌓":"⌓","∝":"âˆ","∝":"âˆ","≾":"≾","⊰":"⊰","𝓅":"ð“…","ψ":"ψ"," ":" ","𝔮":"ð”®","⨌":"⨌","𝕢":"ð•¢","⁗":"â—","𝓆":"ð“†","ℍ":"â„","⨖":"⨖","?":"?","≟":"≟",""":'"',""":'"',"⇛":"⇛","⇒":"⇒","⤜":"⤜","⤏":"â¤","⥤":"⥤","∽̱":"∽̱","ŕ":"Å•","√":"√","⦳":"⦳","⟩":"⟩","⦒":"⦒","⦥":"⦥","⟩":"⟩","»":"»","»":"»","→":"→","⥵":"⥵","⇥":"⇥","⤠":"⤠","⤳":"⤳","⤞":"⤞","↪":"↪","↬":"↬","⥅":"⥅","⥴":"⥴","↣":"↣","↝":"â†","⤚":"⤚","∶":"∶","ℚ":"ℚ","⤍":"â¤","❳":"â³","}":"}","]":"]","⦌":"⦌","⦎":"⦎","⦐":"â¦","ř":"Å™","ŗ":"Å—","⌉":"⌉","}":"}","р":"Ñ€","⤷":"⤷","⥩":"⥩","”":"â€","”":"â€","↳":"↳","ℜ":"ℜ","ℛ":"â„›","ℜ":"ℜ","ℝ":"â„","▭":"â–­","®":"®","®":"®","⥽":"⥽","⌋":"⌋","𝔯":"ð”¯","⇁":"â‡","⇀":"⇀","⥬":"⥬","ρ":"Ï","ϱ":"ϱ","→":"→","↣":"↣","⇁":"â‡","⇀":"⇀","⇄":"⇄","⇌":"⇌","⇉":"⇉","↝":"â†","⋌":"⋌","˚":"Ëš","≓":"≓","⇄":"⇄","⇌":"⇌","‏":"â€","⎱":"⎱","⎱":"⎱","⫮":"â«®","⟭":"⟭","⇾":"⇾","⟧":"⟧","⦆":"⦆","𝕣":"ð•£","⨮":"⨮","⨵":"⨵",")":")","⦔":"⦔","⨒":"⨒","⇉":"⇉","›":"›","𝓇":"ð“‡","↱":"↱","]":"]","’":"’","’":"’","⋌":"⋌","⋊":"⋊","▹":"â–¹","⊵":"⊵","▸":"â–¸","⧎":"â§Ž","⥨":"⥨","℞":"℞","ś":"Å›","‚":"‚","≻":"≻","⪴":"⪴","⪸":"⪸","š":"Å¡","≽":"≽","⪰":"⪰","ş":"ÅŸ","ŝ":"Å","⪶":"⪶","⪺":"⪺","⋩":"â‹©","⨓":"⨓","≿":"≿","с":"Ñ","⋅":"â‹…","⊡":"⊡","⩦":"⩦","⇘":"⇘","⤥":"⤥","↘":"↘","↘":"↘","§":"§","§":"§",";":";","⤩":"⤩","∖":"∖","∖":"∖","✶":"✶","𝔰":"ð”°","⌢":"⌢","♯":"♯","щ":"щ","ш":"ш","∣":"∣","∥":"∥","­":"­","­":"­","σ":"σ","ς":"Ï‚","ς":"Ï‚","∼":"∼","⩪":"⩪","≃":"≃","≃":"≃","⪞":"⪞","⪠":"⪠","⪝":"âª","⪟":"⪟","≆":"≆","⨤":"⨤","⥲":"⥲","←":"â†","∖":"∖","⨳":"⨳","⧤":"⧤","∣":"∣","⌣":"⌣","⪪":"⪪","⪬":"⪬","⪬︀":"⪬︀","ь":"ÑŒ","/":"/","⧄":"â§„","⌿":"⌿","𝕤":"ð•¤","♠":"â™ ","♠":"â™ ","∥":"∥","⊓":"⊓","⊓︀":"⊓︀","⊔":"⊔","⊔︀":"⊔︀","⊏":"âŠ","⊑":"⊑","⊏":"âŠ","⊑":"⊑","⊐":"âŠ","⊒":"⊒","⊐":"âŠ","⊒":"⊒","□":"â–¡","□":"â–¡","▪":"â–ª","▪":"â–ª","→":"→","𝓈":"ð“ˆ","∖":"∖","⌣":"⌣","⋆":"⋆","☆":"☆","★":"★","ϵ":"ϵ","ϕ":"Ï•","¯":"¯","⊂":"⊂","⫅":"â«…","⪽":"⪽","⊆":"⊆","⫃":"⫃","⫁":"â«","⫋":"â«‹","⊊":"⊊","⪿":"⪿","⥹":"⥹","⊂":"⊂","⊆":"⊆","⫅":"â«…","⊊":"⊊","⫋":"â«‹","⫇":"⫇","⫕":"â«•","⫓":"â«“","≻":"≻","⪸":"⪸","≽":"≽","⪰":"⪰","⪺":"⪺","⪶":"⪶","⋩":"â‹©","≿":"≿","∑":"∑","♪":"♪","¹":"¹","¹":"¹","²":"²","²":"²","³":"³","³":"³","⊃":"⊃","⫆":"⫆","⪾":"⪾","⫘":"⫘","⊇":"⊇","⫄":"â«„","⟉":"⟉","⫗":"â«—","⥻":"⥻","⫂":"â«‚","⫌":"⫌","⊋":"⊋","⫀":"â«€","⊃":"⊃","⊇":"⊇","⫆":"⫆","⊋":"⊋","⫌":"⫌","⫈":"⫈","⫔":"â«”","⫖":"â«–","⇙":"⇙","⤦":"⤦","↙":"↙","↙":"↙","⤪":"⤪","ß":"ß","ß":"ß","⌖":"⌖","τ":"Ï„","⎴":"⎴","ť":"Å¥","ţ":"Å£","т":"Ñ‚","⃛":"⃛","⌕":"⌕","𝔱":"ð”±","∴":"∴","∴":"∴","θ":"θ","ϑ":"Ï‘","ϑ":"Ï‘","≈":"≈","∼":"∼"," ":" ","≈":"≈","∼":"∼","þ":"þ","þ":"þ","˜":"Ëœ","×":"×","×":"×","⊠":"⊠","⨱":"⨱","⨰":"⨰","∭":"∭","⤨":"⤨","⊤":"⊤","⌶":"⌶","⫱":"⫱","𝕥":"ð•¥","⫚":"⫚","⤩":"⤩","‴":"‴","™":"â„¢","▵":"â–µ","▿":"â–¿","◃":"â—ƒ","⊴":"⊴","≜":"≜","▹":"â–¹","⊵":"⊵","◬":"â—¬","≜":"≜","⨺":"⨺","⨹":"⨹","⧍":"â§","⨻":"⨻","⏢":"â¢","𝓉":"ð“‰","ц":"ц","ћ":"Ñ›","ŧ":"ŧ","≬":"≬","↞":"↞","↠":"↠","⇑":"⇑","⥣":"⥣","ú":"ú","ú":"ú","↑":"↑","ў":"Ñž","ŭ":"Å­","û":"û","û":"û","у":"у","⇅":"⇅","ű":"ű","⥮":"⥮","⥾":"⥾","𝔲":"ð”²","ù":"ù","ù":"ù","↿":"↿","↾":"↾","▀":"â–€","⌜":"⌜","⌜":"⌜","⌏":"âŒ","◸":"â—¸","ū":"Å«","¨":"¨","¨":"¨","ų":"ų","𝕦":"ð•¦","↑":"↑","↕":"↕","↿":"↿","↾":"↾","⊎":"⊎","υ":"Ï…","ϒ":"Ï’","υ":"Ï…","⇈":"⇈","⌝":"âŒ","⌝":"âŒ","⌎":"⌎","ů":"ů","◹":"â—¹","𝓊":"ð“Š","⋰":"â‹°","ũ":"Å©","▵":"â–µ","▴":"â–´","⇈":"⇈","ü":"ü","ü":"ü","⦧":"⦧","⇕":"⇕","⫨":"⫨","⫩":"â«©","⊨":"⊨","⦜":"⦜","ϵ":"ϵ","ϰ":"ϰ","∅":"∅","ϕ":"Ï•","ϖ":"Ï–","∝":"âˆ","↕":"↕","ϱ":"ϱ","ς":"Ï‚","⊊︀":"⊊︀","⫋︀":"⫋︀","⊋︀":"⊋︀","⫌︀":"⫌︀","ϑ":"Ï‘","⊲":"⊲","⊳":"⊳","в":"в","⊢":"⊢","∨":"∨","⊻":"⊻","≚":"≚","⋮":"â‹®","|":"|","|":"|","𝔳":"ð”³","⊲":"⊲","⊂⃒":"⊂⃒","⊃⃒":"⊃⃒","𝕧":"ð•§","∝":"âˆ","⊳":"⊳","𝓋":"ð“‹","⫋︀":"⫋︀","⊊︀":"⊊︀","⫌︀":"⫌︀","⊋︀":"⊋︀","⦚":"⦚","ŵ":"ŵ","⩟":"⩟","∧":"∧","≙":"≙","℘":"℘","𝔴":"ð”´","𝕨":"ð•¨","℘":"℘","≀":"≀","≀":"≀","𝓌":"ð“Œ","⋂":"â‹‚","◯":"â—¯","⋃":"⋃","▽":"â–½","𝔵":"ð”µ","⟺":"⟺","⟷":"⟷","ξ":"ξ","⟸":"⟸","⟵":"⟵","⟼":"⟼","⋻":"â‹»","⨀":"⨀","𝕩":"ð•©","⨁":"â¨","⨂":"⨂","⟹":"⟹","⟶":"⟶","𝓍":"ð“","⨆":"⨆","⨄":"⨄","△":"â–³","⋁":"â‹","⋀":"â‹€","ý":"ý","ý":"ý","я":"Ñ","ŷ":"Å·","ы":"Ñ‹","¥":"Â¥","¥":"Â¥","𝔶":"ð”¶","ї":"Ñ—","𝕪":"ð•ª","𝓎":"ð“Ž","ю":"ÑŽ","ÿ":"ÿ","ÿ":"ÿ","ź":"ź","ž":"ž","з":"з","ż":"ż","ℨ":"ℨ","ζ":"ζ","𝔷":"ð”·","ж":"ж","⇝":"â‡","𝕫":"ð•«","𝓏":"ð“","‍":"â€","‌":"‌"},characters:{"Æ":"Æ","&":"&","Ã":"Á","Ä‚":"Ă","Â":"Â","Ð":"А","ð”„":"𝔄","À":"À","Α":"Α","Ä€":"Ā","â©“":"⩓","Ä„":"Ą","ð”¸":"𝔸","â¡":"⁡","Ã…":"Å","ð’œ":"𝒜","≔":"≔","Ã":"Ã","Ä":"Ä","∖":"∖","â«§":"⫧","⌆":"⌆","Б":"Б","∵":"∵","ℬ":"ℬ","Î’":"Β","ð”…":"𝔅","ð”¹":"𝔹","˘":"˘","≎":"≎","Ч":"Ч","©":"©","Ć":"Ć","â‹’":"⋒","â……":"ⅅ","â„­":"ℭ","ÄŒ":"Č","Ç":"Ç","Ĉ":"Ĉ","∰":"∰","ÄŠ":"Ċ","¸":"¸","·":"·","Χ":"Χ","⊙":"⊙","⊖":"⊖","⊕":"⊕","⊗":"⊗","∲":"∲","â€":"”","’":"’","∷":"∷","â©´":"⩴","≡":"≡","∯":"∯","∮":"∮","â„‚":"ℂ","âˆ":"∐","∳":"∳","⨯":"⨯","ð’ž":"𝒞","â‹“":"⋓","â‰":"≍","⤑":"⤑","Ђ":"Ђ","Ð…":"Ѕ","Ð":"Џ","‡":"‡","↡":"↡","⫤":"⫤","ÄŽ":"Ď","Д":"Д","∇":"∇","Δ":"Δ","ð”‡":"𝔇","´":"´","Ë™":"˙","Ë":"˝","`":"`","Ëœ":"˜","â‹„":"⋄","â…†":"ⅆ","ð”»":"𝔻","¨":"¨","⃜":"⃜","â‰":"≐","⇓":"⇓","â‡":"⇐","⇔":"⇔","⟸":"⟸","⟺":"⟺","⟹":"⟹","⇒":"⇒","⊨":"⊨","⇑":"⇑","⇕":"⇕","∥":"∥","↓":"↓","⤓":"⤓","⇵":"⇵","Ì‘":"̑","â¥":"⥐","⥞":"⥞","↽":"↽","⥖":"⥖","⥟":"⥟","â‡":"⇁","⥗":"⥗","⊤":"⊤","↧":"↧","ð’Ÿ":"𝒟","Ä":"Đ","ÅŠ":"Ŋ","Ã":"Ð","É":"É","Äš":"Ě","Ê":"Ê","Э":"Э","Ä–":"Ė","ð”ˆ":"𝔈","È":"È","∈":"∈","Ä’":"Ē","â—»":"◻","â–«":"▫","Ę":"Ę","ð”¼":"𝔼","Ε":"Ε","⩵":"⩵","≂":"≂","⇌":"⇌","â„°":"ℰ","⩳":"⩳","Η":"Η","Ë":"Ë","∃":"∃","â…‡":"ⅇ","Ф":"Ф","ð”‰":"𝔉","â—¼":"◼","â–ª":"▪","ð”½":"𝔽","∀":"∀","ℱ":"ℱ","Ѓ":"Ѓ",">":">","Γ":"Γ","Ïœ":"Ϝ","Äž":"Ğ","Ä¢":"Ģ","Äœ":"Ĝ","Г":"Г","Ä ":"Ġ","ð”Š":"𝔊","â‹™":"⋙","ð”¾":"𝔾","≥":"≥","â‹›":"⋛","≧":"≧","⪢":"⪢","≷":"≷","⩾":"⩾","≳":"≳","ð’¢":"𝒢","≫":"≫","Ъ":"Ъ","ˇ":"ˇ","^":"^","Ĥ":"Ĥ","ℌ":"ℌ","â„‹":"ℋ","â„":"ℍ","─":"─","Ħ":"Ħ","â‰":"≏","Е":"Е","IJ":"IJ","Ð":"Ё","Ã":"Í","ÃŽ":"Î","И":"И","İ":"İ","â„‘":"ℑ","ÃŒ":"Ì","Ī":"Ī","â…ˆ":"ⅈ","∬":"∬","∫":"∫","â‹‚":"⋂","â£":"⁣","â¢":"⁢","Ä®":"Į","ð•€":"𝕀","Ι":"Ι","â„":"ℐ","Ĩ":"Ĩ","І":"І","Ã":"Ï","Ä´":"Ĵ","Й":"Й","ð”":"𝔍","ð•":"𝕁","ð’¥":"𝒥","Ј":"Ј","Є":"Є","Ð¥":"Х","ÐŒ":"Ќ","Κ":"Κ","Ķ":"Ķ","К":"К","ð”Ž":"𝔎","ð•‚":"𝕂","ð’¦":"𝒦","Љ":"Љ","<":"<","Ĺ":"Ĺ","Λ":"Λ","⟪":"⟪","â„’":"ℒ","↞":"↞","Ľ":"Ľ","Ä»":"Ļ","Л":"Л","⟨":"⟨","â†":"←","⇤":"⇤","⇆":"⇆","⌈":"⌈","⟦":"⟦","⥡":"⥡","⇃":"⇃","⥙":"⥙","⌊":"⌊","↔":"↔","⥎":"⥎","⊣":"⊣","↤":"↤","⥚":"⥚","⊲":"⊲","â§":"⧏","⊴":"⊴","⥑":"⥑","⥠":"⥠","↿":"↿","⥘":"⥘","↼":"↼","⥒":"⥒","⋚":"⋚","≦":"≦","≶":"≶","⪡":"⪡","⩽":"⩽","≲":"≲","ð”":"𝔏","⋘":"⋘","⇚":"⇚","Ä¿":"Ŀ","⟵":"⟵","⟷":"⟷","⟶":"⟶","ð•ƒ":"𝕃","↙":"↙","↘":"↘","↰":"↰","Å":"Ł","≪":"≪","⤅":"⤅","М":"М","âŸ":" ","ℳ":"ℳ","ð”":"𝔐","∓":"∓","ð•„":"𝕄","Μ":"Μ","Њ":"Њ","Ń":"Ń","Ň":"Ň","Å…":"Ņ","Ð":"Н","​":"​","\n":" ","ð”‘":"𝔑","â ":"⁠"," ":" ","â„•":"ℕ","⫬":"⫬","≢":"≢","≭":"≭","∦":"∦","∉":"∉","≠":"≠","≂̸":"≂̸","∄":"∄","≯":"≯","≱":"≱","≧̸":"≧̸","≫̸":"≫̸","≹":"≹","⩾̸":"⩾̸","≵":"≵","≎̸":"≎̸","â‰Ì¸":"≏̸","⋪":"⋪","â§Ì¸":"⧏̸","⋬":"⋬","≮":"≮","≰":"≰","≸":"≸","≪̸":"≪̸","⩽̸":"⩽̸","≴":"≴","⪢̸":"⪢̸","⪡̸":"⪡̸","⊀":"⊀","⪯̸":"⪯̸","â‹ ":"⋠","∌":"∌","â‹«":"⋫","â§Ì¸":"⧐̸","â‹­":"⋭","âŠÌ¸":"⊏̸","â‹¢":"⋢","âŠÌ¸":"⊐̸","â‹£":"⋣","⊂⃒":"⊂⃒","⊈":"⊈","âŠ":"⊁","⪰̸":"⪰̸","â‹¡":"⋡","≿̸":"≿̸","⊃⃒":"⊃⃒","⊉":"⊉","â‰":"≁","≄":"≄","≇":"≇","≉":"≉","∤":"∤","ð’©":"𝒩","Ñ":"Ñ","Î":"Ν","Å’":"Œ","Ó":"Ó","Ô":"Ô","О":"О","Å":"Ő","ð”’":"𝔒","Ã’":"Ò","ÅŒ":"Ō","Ω":"Ω","Ο":"Ο","ð•†":"𝕆","“":"“","‘":"‘","â©”":"⩔","ð’ª":"𝒪","Ø":"Ø","Õ":"Õ","⨷":"⨷","Ö":"Ö","‾":"‾","âž":"⏞","⎴":"⎴","âœ":"⏜","∂":"∂","П":"П","ð”“":"𝔓","Φ":"Φ","Π":"Π","±":"±","â„™":"ℙ","⪻":"⪻","≺":"≺","⪯":"⪯","≼":"≼","≾":"≾","″":"″","âˆ":"∏","âˆ":"∝","ð’«":"𝒫","Ψ":"Ψ",'"':""","ð””":"𝔔","ℚ":"ℚ","ð’¬":"𝒬","â¤":"⤐","®":"®","Å”":"Ŕ","⟫":"⟫","↠":"↠","⤖":"⤖","Ř":"Ř","Å–":"Ŗ","Р":"Р","ℜ":"ℜ","∋":"∋","⇋":"⇋","⥯":"⥯","Ρ":"Ρ","⟩":"⟩","→":"→","⇥":"⇥","⇄":"⇄","⌉":"⌉","⟧":"⟧","â¥":"⥝","⇂":"⇂","⥕":"⥕","⌋":"⌋","⊢":"⊢","↦":"↦","⥛":"⥛","⊳":"⊳","â§":"⧐","⊵":"⊵","â¥":"⥏","⥜":"⥜","↾":"↾","⥔":"⥔","⇀":"⇀","⥓":"⥓","â„":"ℝ","⥰":"⥰","⇛":"⇛","â„›":"ℛ","↱":"↱","â§´":"⧴","Щ":"Щ","Ш":"Ш","Ь":"Ь","Åš":"Ś","⪼":"⪼","Å ":"Š","Åž":"Ş","Åœ":"Ŝ","С":"С","ð”–":"𝔖","↑":"↑","Σ":"Σ","∘":"∘","ð•Š":"𝕊","√":"√","â–¡":"□","⊓":"⊓","âŠ":"⊏","⊑":"⊑","âŠ":"⊐","⊒":"⊒","⊔":"⊔","ð’®":"𝒮","⋆":"⋆","â‹":"⋐","⊆":"⊆","≻":"≻","⪰":"⪰","≽":"≽","≿":"≿","∑":"∑","â‹‘":"⋑","⊃":"⊃","⊇":"⊇","Þ":"Þ","â„¢":"™","Ћ":"Ћ","Ц":"Ц","\t":" ","Τ":"Τ","Ť":"Ť","Å¢":"Ţ","Т":"Т","ð”—":"𝔗","∴":"∴","Θ":"Θ","âŸâ€Š":"  "," ":" ","∼":"∼","≃":"≃","≅":"≅","≈":"≈","ð•‹":"𝕋","⃛":"⃛","ð’¯":"𝒯","Ŧ":"Ŧ","Ú":"Ú","↟":"↟","⥉":"⥉","ÐŽ":"Ў","Ŭ":"Ŭ","Û":"Û","У":"У","Ű":"Ű","ð”˜":"𝔘","Ù":"Ù","Ū":"Ū",_:"_","âŸ":"⏟","⎵":"⎵","â":"⏝","⋃":"⋃","⊎":"⊎","Ų":"Ų","ð•Œ":"𝕌","⤒":"⤒","⇅":"⇅","↕":"↕","⥮":"⥮","⊥":"⊥","↥":"↥","↖":"↖","↗":"↗","Ï’":"ϒ","Î¥":"Υ","Å®":"Ů","ð’°":"𝒰","Ũ":"Ũ","Ü":"Ü","⊫":"⊫","â««":"⫫","Ð’":"В","⊩":"⊩","⫦":"⫦","â‹":"⋁","‖":"‖","∣":"∣","|":"|","â˜":"❘","≀":"≀"," ":" ","ð”™":"𝔙","ð•":"𝕍","ð’±":"𝒱","⊪":"⊪","Å´":"Ŵ","â‹€":"⋀","ð”š":"𝔚","ð•Ž":"𝕎","ð’²":"𝒲","ð”›":"𝔛","Ξ":"Ξ","ð•":"𝕏","ð’³":"𝒳","Я":"Я","Ї":"Ї","Ю":"Ю","Ã":"Ý","Ŷ":"Ŷ","Ы":"Ы","ð”œ":"𝔜","ð•":"𝕐","ð’´":"𝒴","Ÿ":"Ÿ","Ж":"Ж","Ź":"Ź","Ž":"Ž","З":"З","Å»":"Ż","Ζ":"Ζ","ℨ":"ℨ","ℤ":"ℤ","ð’µ":"𝒵","á":"á","ă":"ă","∾":"∾","∾̳":"∾̳","∿":"∿","â":"â","а":"а","æ":"æ","ð”ž":"𝔞","à":"à","ℵ":"ℵ","α":"α","Ä":"ā","⨿":"⨿","∧":"∧","â©•":"⩕","⩜":"⩜","⩘":"⩘","⩚":"⩚","∠":"∠","⦤":"⦤","∡":"∡","⦨":"⦨","⦩":"⦩","⦪":"⦪","⦫":"⦫","⦬":"⦬","⦭":"⦭","⦮":"⦮","⦯":"⦯","∟":"∟","⊾":"⊾","â¦":"⦝","∢":"∢","â¼":"⍼","Ä…":"ą","ð•’":"𝕒","â©°":"⩰","⩯":"⩯","≊":"≊","≋":"≋","'":"'","Ã¥":"å","ð’¶":"𝒶","*":"*","ã":"ã","ä":"ä","⨑":"⨑","â«­":"⫭","≌":"≌","϶":"϶","‵":"‵","∽":"∽","â‹":"⋍","⊽":"⊽","⌅":"⌅","⎶":"⎶","б":"б","„":"„","⦰":"⦰","β":"β","â„¶":"ℶ","≬":"≬","ð”Ÿ":"𝔟","â—¯":"◯","⨀":"⨀","â¨":"⨁","⨂":"⨂","⨆":"⨆","★":"★","â–½":"▽","â–³":"△","⨄":"⨄","â¤":"⤍","â§«":"⧫","â–´":"▴","â–¾":"▾","â—‚":"◂","â–¸":"▸","â£":"␣","â–’":"▒","â–‘":"░","â–“":"▓","â–ˆ":"█","=⃥":"=⃥","≡⃥":"≡⃥","âŒ":"⌐","ð•“":"𝕓","⋈":"⋈","â•—":"╗","â•”":"╔","â•–":"╖","â•“":"╓","â•":"═","╦":"╦","â•©":"╩","╤":"╤","â•§":"╧","â•":"╝","╚":"╚","╜":"╜","â•™":"╙","â•‘":"║","╬":"╬","â•£":"╣","â• ":"╠","â•«":"╫","â•¢":"╢","╟":"╟","⧉":"⧉","â••":"╕","â•’":"╒","â”":"┐","┌":"┌","â•¥":"╥","╨":"╨","┬":"┬","â”´":"┴","⊟":"⊟","⊞":"⊞","⊠":"⊠","â•›":"╛","╘":"╘","┘":"┘","â””":"└","│":"│","╪":"╪","â•¡":"╡","╞":"╞","┼":"┼","┤":"┤","├":"├","¦":"¦","ð’·":"𝒷","â":"⁏","\\":"\","â§…":"⧅","⟈":"⟈","•":"•","⪮":"⪮","ć":"ć","∩":"∩","â©„":"⩄","⩉":"⩉","â©‹":"⩋","⩇":"⩇","â©€":"⩀","∩︀":"∩︀","â":"⁁","â©":"⩍","Ä":"č","ç":"ç","ĉ":"ĉ","⩌":"⩌","â©":"⩐","Ä‹":"ċ","⦲":"⦲","¢":"¢","ð” ":"𝔠","ч":"ч","✓":"✓","χ":"χ","â—‹":"○","⧃":"⧃","ˆ":"ˆ","≗":"≗","↺":"↺","↻":"↻","Ⓢ":"Ⓢ","⊛":"⊛","⊚":"⊚","âŠ":"⊝","â¨":"⨐","⫯":"⫯","â§‚":"⧂","♣":"♣",":":":",",":",","@":"@","âˆ":"∁","â©­":"⩭","ð•”":"𝕔","â„—":"℗","↵":"↵","✗":"✗","ð’¸":"𝒸","â«":"⫏","â«‘":"⫑","â«":"⫐","â«’":"⫒","⋯":"⋯","⤸":"⤸","⤵":"⤵","⋞":"⋞","⋟":"⋟","↶":"↶","⤽":"⤽","∪":"∪","⩈":"⩈","⩆":"⩆","⩊":"⩊","âŠ":"⊍","â©…":"⩅","∪︀":"∪︀","↷":"↷","⤼":"⤼","⋎":"⋎","â‹":"⋏","¤":"¤","∱":"∱","⌭":"⌭","⥥":"⥥","†":"†","ℸ":"ℸ","â€":"‐","â¤":"⤏","Ä":"ď","д":"д","⇊":"⇊","â©·":"⩷","°":"°","δ":"δ","⦱":"⦱","⥿":"⥿","ð”¡":"𝔡","♦":"♦","Ï":"ϝ","⋲":"⋲","÷":"÷","⋇":"⋇","Ñ’":"ђ","⌞":"⌞","âŒ":"⌍",$:"$","ð••":"𝕕","≑":"≑","∸":"∸","∔":"∔","⊡":"⊡","⌟":"⌟","⌌":"⌌","ð’¹":"𝒹","Ñ•":"ѕ","â§¶":"⧶","Ä‘":"đ","⋱":"⋱","â–¿":"▿","⦦":"⦦","ÑŸ":"џ","⟿":"⟿","é":"é","â©®":"⩮","Ä›":"ě","≖":"≖","ê":"ê","≕":"≕","Ñ":"э","Ä—":"ė","≒":"≒","ð”¢":"𝔢","⪚":"⪚","è":"è","⪖":"⪖","⪘":"⪘","⪙":"⪙","â§":"⏧","â„“":"ℓ","⪕":"⪕","⪗":"⪗","Ä“":"ē","∅":"∅"," ":" "," ":" "," ":" ","Å‹":"ŋ"," ":" ","Ä™":"ę","ð•–":"𝕖","â‹•":"⋕","â§£":"⧣","⩱":"⩱","ε":"ε","ϵ":"ϵ","=":"=","≟":"≟","⩸":"⩸","â§¥":"⧥","≓":"≓","⥱":"⥱","ℯ":"ℯ","η":"η","ð":"ð","ë":"ë","€":"€","!":"!","Ñ„":"ф","♀":"♀","ffi":"ffi","ff":"ff","ffl":"ffl","ð”£":"𝔣","ï¬":"fi",fj:"fj","â™­":"♭","fl":"fl","â–±":"▱","Æ’":"ƒ","ð•—":"𝕗","â‹”":"⋔","â«™":"⫙","â¨":"⨍","½":"½","â…“":"⅓","¼":"¼","â…•":"⅕","â…™":"⅙","â…›":"⅛","â…”":"⅔","â…–":"⅖","¾":"¾","â…—":"⅗","â…œ":"⅜","â…˜":"⅘","â…š":"⅚","â…":"⅝","â…ž":"⅞","â„":"⁄","⌢":"⌢","ð’»":"𝒻","⪌":"⪌","ǵ":"ǵ","γ":"γ","⪆":"⪆","ÄŸ":"ğ","Ä":"ĝ","г":"г","Ä¡":"ġ","⪩":"⪩","⪀":"⪀","⪂":"⪂","⪄":"⪄","⋛︀":"⋛︀","⪔":"⪔","ð”¤":"𝔤","â„·":"ℷ","Ñ“":"ѓ","⪒":"⪒","⪥":"⪥","⪤":"⪤","≩":"≩","⪊":"⪊","⪈":"⪈","â‹§":"⋧","ð•˜":"𝕘","ℊ":"ℊ","⪎":"⪎","âª":"⪐","⪧":"⪧","⩺":"⩺","â‹—":"⋗","⦕":"⦕","⩼":"⩼","⥸":"⥸","≩︀":"≩︀","ÑŠ":"ъ","⥈":"⥈","↭":"↭","â„":"ℏ","Ä¥":"ĥ","♥":"♥","…":"…","⊹":"⊹","ð”¥":"𝔥","⤥":"⤥","⤦":"⤦","⇿":"⇿","∻":"∻","↩":"↩","↪":"↪","ð•™":"𝕙","―":"―","ð’½":"𝒽","ħ":"ħ","âƒ":"⁃","í":"í","î":"î","и":"и","е":"е","¡":"¡","ð”¦":"𝔦","ì":"ì","⨌":"⨌","∭":"∭","â§œ":"⧜","â„©":"℩","ij":"ij","Ä«":"ī","ı":"ı","⊷":"⊷","Ƶ":"Ƶ","â„…":"℅","∞":"∞","â§":"⧝","⊺":"⊺","⨗":"⨗","⨼":"⨼","Ñ‘":"ё","į":"į","ð•š":"𝕚","ι":"ι","¿":"¿","ð’¾":"𝒾","⋹":"⋹","⋵":"⋵","â‹´":"⋴","⋳":"⋳","Ä©":"ĩ","Ñ–":"і","ï":"ï","ĵ":"ĵ","й":"й","ð”§":"𝔧","È·":"ȷ","ð•›":"𝕛","ð’¿":"𝒿","ј":"ј","Ñ”":"є","κ":"κ","ϰ":"ϰ","Ä·":"ķ","к":"к","ð”¨":"𝔨","ĸ":"ĸ","Ñ…":"х","Ñœ":"ќ","ð•œ":"𝕜","ð“€":"𝓀","⤛":"⤛","⤎":"⤎","⪋":"⪋","⥢":"⥢","ĺ":"ĺ","⦴":"⦴","λ":"λ","⦑":"⦑","⪅":"⪅","«":"«","⤟":"⤟","â¤":"⤝","↫":"↫","⤹":"⤹","⥳":"⥳","↢":"↢","⪫":"⪫","⤙":"⤙","⪭":"⪭","⪭︀":"⪭︀","⤌":"⤌","â²":"❲","{":"{","[":"[","⦋":"⦋","â¦":"⦏","â¦":"⦍","ľ":"ľ","ļ":"ļ","л":"л","⤶":"⤶","⥧":"⥧","⥋":"⥋","↲":"↲","≤":"≤","⇇":"⇇","â‹‹":"⋋","⪨":"⪨","â©¿":"⩿","âª":"⪁","⪃":"⪃","⋚︀":"⋚︀","⪓":"⪓","â‹–":"⋖","⥼":"⥼","ð”©":"𝔩","⪑":"⪑","⥪":"⥪","â–„":"▄","Ñ™":"љ","⥫":"⥫","â—º":"◺","Å€":"ŀ","⎰":"⎰","≨":"≨","⪉":"⪉","⪇":"⪇","⋦":"⋦","⟬":"⟬","⇽":"⇽","⟼":"⟼","↬":"↬","⦅":"⦅","ð•":"𝕝","⨭":"⨭","⨴":"⨴","∗":"∗","â—Š":"◊","(":"(","⦓":"⦓","⥭":"⥭","‎":"‎","⊿":"⊿","‹":"‹","ð“":"𝓁","âª":"⪍","âª":"⪏","‚":"‚","Å‚":"ł","⪦":"⪦","⩹":"⩹","⋉":"⋉","⥶":"⥶","â©»":"⩻","⦖":"⦖","â—ƒ":"◃","⥊":"⥊","⥦":"⥦","≨︀":"≨︀","∺":"∺","¯":"¯","♂":"♂","✠":"✠","â–®":"▮","⨩":"⨩","м":"м","—":"—","ð”ª":"𝔪","â„§":"℧","µ":"µ","â«°":"⫰","−":"−","⨪":"⨪","â«›":"⫛","⊧":"⊧","ð•ž":"𝕞","ð“‚":"𝓂","μ":"μ","⊸":"⊸","⋙̸":"⋙̸","≫⃒":"≫⃒","â‡":"⇍","⇎":"⇎","⋘̸":"⋘̸","≪⃒":"≪⃒","â‡":"⇏","⊯":"⊯","⊮":"⊮","Å„":"ń","∠⃒":"∠⃒","⩰̸":"⩰̸","≋̸":"≋̸","ʼn":"ʼn","â™®":"♮","⩃":"⩃","ň":"ň","ņ":"ņ","⩭̸":"⩭̸","â©‚":"⩂","н":"н","–":"–","⇗":"⇗","⤤":"⤤","â‰Ì¸":"≐̸","⤨":"⤨","ð”«":"𝔫","↮":"↮","⫲":"⫲","⋼":"⋼","⋺":"⋺","Ñš":"њ","≦̸":"≦̸","↚":"↚","‥":"‥","ð•Ÿ":"𝕟","¬":"¬","⋹̸":"⋹̸","⋵̸":"⋵̸","â‹·":"⋷","â‹¶":"⋶","⋾":"⋾","⋽":"⋽","⫽⃥":"⫽⃥","∂̸":"∂̸","⨔":"⨔","↛":"↛","⤳̸":"⤳̸","â†Ì¸":"↝̸","ð“ƒ":"𝓃","⊄":"⊄","⫅̸":"⫅̸","⊅":"⊅","⫆̸":"⫆̸","ñ":"ñ","ν":"ν","#":"#","â„–":"№"," ":" ","⊭":"⊭","⤄":"⤄","â‰âƒ’":"≍⃒","⊬":"⊬","≥⃒":"≥⃒",">⃒":">⃒","â§ž":"⧞","⤂":"⤂","≤⃒":"≤⃒","<⃒":"<⃒","⊴⃒":"⊴⃒","⤃":"⤃","⊵⃒":"⊵⃒","∼⃒":"∼⃒","⇖":"⇖","⤣":"⤣","⤧":"⤧","ó":"ó","ô":"ô","о":"о","Å‘":"ő","⨸":"⨸","⦼":"⦼","Å“":"œ","⦿":"⦿","ð”¬":"𝔬","Ë›":"˛","ò":"ò","â§":"⧁","⦵":"⦵","⦾":"⦾","⦻":"⦻","â§€":"⧀","Å":"ō","ω":"ω","ο":"ο","⦶":"⦶","ð• ":"𝕠","⦷":"⦷","⦹":"⦹","∨":"∨","â©":"⩝","â„´":"ℴ","ª":"ª","º":"º","⊶":"⊶","â©–":"⩖","â©—":"⩗","â©›":"⩛","ø":"ø","⊘":"⊘","õ":"õ","⨶":"⨶","ö":"ö","⌽":"⌽","¶":"¶","⫳":"⫳","⫽":"⫽","п":"п","%":"%",".":".","‰":"‰","‱":"‱","ð”­":"𝔭","φ":"φ","Ï•":"ϕ","☎":"☎","Ï€":"π","Ï–":"ϖ","ℎ":"ℎ","+":"+","⨣":"⨣","⨢":"⨢","⨥":"⨥","⩲":"⩲","⨦":"⨦","⨧":"⨧","⨕":"⨕","ð•¡":"𝕡","£":"£","⪳":"⪳","⪷":"⪷","⪹":"⪹","⪵":"⪵","⋨":"⋨","′":"′","⌮":"⌮","⌒":"⌒","⌓":"⌓","⊰":"⊰","ð“…":"𝓅","ψ":"ψ"," ":" ","ð”®":"𝔮","ð•¢":"𝕢","â—":"⁗","ð“†":"𝓆","⨖":"⨖","?":"?","⤜":"⤜","⥤":"⥤","∽̱":"∽̱","Å•":"ŕ","⦳":"⦳","⦒":"⦒","⦥":"⦥","»":"»","⥵":"⥵","⤠":"⤠","⤳":"⤳","⤞":"⤞","⥅":"⥅","⥴":"⥴","↣":"↣","â†":"↝","⤚":"⤚","∶":"∶","â³":"❳","}":"}","]":"]","⦌":"⦌","⦎":"⦎","â¦":"⦐","Å™":"ř","Å—":"ŗ","Ñ€":"р","⤷":"⤷","⥩":"⥩","↳":"↳","â–­":"▭","⥽":"⥽","ð”¯":"𝔯","⥬":"⥬","Ï":"ρ","ϱ":"ϱ","⇉":"⇉","⋌":"⋌","Ëš":"˚","â€":"‏","⎱":"⎱","â«®":"⫮","⟭":"⟭","⇾":"⇾","⦆":"⦆","ð•£":"𝕣","⨮":"⨮","⨵":"⨵",")":")","⦔":"⦔","⨒":"⨒","›":"›","ð“‡":"𝓇","⋊":"⋊","â–¹":"▹","â§Ž":"⧎","⥨":"⥨","℞":"℞","Å›":"ś","⪴":"⪴","⪸":"⪸","Å¡":"š","ÅŸ":"ş","Å":"ŝ","⪶":"⪶","⪺":"⪺","â‹©":"⋩","⨓":"⨓","Ñ":"с","â‹…":"⋅","⩦":"⩦","⇘":"⇘","§":"§",";":";","⤩":"⤩","✶":"✶","ð”°":"𝔰","♯":"♯","щ":"щ","ш":"ш","­":"­","σ":"σ","Ï‚":"ς","⩪":"⩪","⪞":"⪞","⪠":"⪠","âª":"⪝","⪟":"⪟","≆":"≆","⨤":"⨤","⥲":"⥲","⨳":"⨳","⧤":"⧤","⌣":"⌣","⪪":"⪪","⪬":"⪬","⪬︀":"⪬︀","ÑŒ":"ь","/":"/","â§„":"⧄","⌿":"⌿","ð•¤":"𝕤","â™ ":"♠","⊓︀":"⊓︀","⊔︀":"⊔︀","ð“ˆ":"𝓈","☆":"☆","⊂":"⊂","â«…":"⫅","⪽":"⪽","⫃":"⫃","â«":"⫁","â«‹":"⫋","⊊":"⊊","⪿":"⪿","⥹":"⥹","⫇":"⫇","â«•":"⫕","â«“":"⫓","♪":"♪","¹":"¹","²":"²","³":"³","⫆":"⫆","⪾":"⪾","⫘":"⫘","â«„":"⫄","⟉":"⟉","â«—":"⫗","⥻":"⥻","â«‚":"⫂","⫌":"⫌","⊋":"⊋","â«€":"⫀","⫈":"⫈","â«”":"⫔","â«–":"⫖","⇙":"⇙","⤪":"⤪","ß":"ß","⌖":"⌖","Ï„":"τ","Å¥":"ť","Å£":"ţ","Ñ‚":"т","⌕":"⌕","ð”±":"𝔱","θ":"θ","Ï‘":"ϑ","þ":"þ","×":"×","⨱":"⨱","⨰":"⨰","⌶":"⌶","⫱":"⫱","ð•¥":"𝕥","⫚":"⫚","‴":"‴","â–µ":"▵","≜":"≜","â—¬":"◬","⨺":"⨺","⨹":"⨹","â§":"⧍","⨻":"⨻","â¢":"⏢","ð“‰":"𝓉","ц":"ц","Ñ›":"ћ","ŧ":"ŧ","⥣":"⥣","ú":"ú","Ñž":"ў","Å­":"ŭ","û":"û","у":"у","ű":"ű","⥾":"⥾","ð”²":"𝔲","ù":"ù","â–€":"▀","⌜":"⌜","âŒ":"⌏","â—¸":"◸","Å«":"ū","ų":"ų","ð•¦":"𝕦","Ï…":"υ","⇈":"⇈","âŒ":"⌝","⌎":"⌎","ů":"ů","â—¹":"◹","ð“Š":"𝓊","â‹°":"⋰","Å©":"ũ","ü":"ü","⦧":"⦧","⫨":"⫨","â«©":"⫩","⦜":"⦜","⊊︀":"⊊︀","⫋︀":"⫋︀","⊋︀":"⊋︀","⫌︀":"⫌︀","в":"в","⊻":"⊻","≚":"≚","â‹®":"⋮","ð”³":"𝔳","ð•§":"𝕧","ð“‹":"𝓋","⦚":"⦚","ŵ":"ŵ","⩟":"⩟","≙":"≙","℘":"℘","ð”´":"𝔴","ð•¨":"𝕨","ð“Œ":"𝓌","ð”µ":"𝔵","ξ":"ξ","â‹»":"⋻","ð•©":"𝕩","ð“":"𝓍","ý":"ý","Ñ":"я","Å·":"ŷ","Ñ‹":"ы","Â¥":"¥","ð”¶":"𝔶","Ñ—":"ї","ð•ª":"𝕪","ð“Ž":"𝓎","ÑŽ":"ю","ÿ":"ÿ","ź":"ź","ž":"ž","з":"з","ż":"ż","ζ":"ζ","ð”·":"𝔷","ж":"ж","â‡":"⇝","ð•«":"𝕫","ð“":"𝓏","â€":"‍","‌":"‌"}}}; - -/***/ }), - -/***/ "./node_modules/html-entities/lib/numeric-unicode-map.js": -/*!***************************************************************!*\ - !*** ./node_modules/html-entities/lib/numeric-unicode-map.js ***! - \***************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.numericUnicodeMap={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376}; - -/***/ }), - -/***/ "./node_modules/html-entities/lib/surrogate-pairs.js": -/*!***********************************************************!*\ - !*** ./node_modules/html-entities/lib/surrogate-pairs.js ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.fromCodePoint=String.fromCodePoint||function(astralCodePoint){return String.fromCharCode(Math.floor((astralCodePoint-65536)/1024)+55296,(astralCodePoint-65536)%1024+56320)};exports.getCodePoint=String.prototype.codePointAt?function(input,position){return input.codePointAt(position)}:function(input,position){return(input.charCodeAt(position)-55296)*1024+input.charCodeAt(position+1)-56320+65536};exports.highSurrogateFrom=55296;exports.highSurrogateTo=56319; - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js": -/*!***************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/clients/WebSocketClient.js ***! - \***************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": function() { return /* binding */ WebSocketClient; } -/* harmony export */ }); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } - - - -var WebSocketClient = /*#__PURE__*/function () { - /** - * @param {string} url - */ - function WebSocketClient(url) { - _classCallCheck(this, WebSocketClient); - - this.client = new WebSocket(url); - - this.client.onerror = function (error) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_0__.log.error(error); - }; - } - /** - * @param {(...args: any[]) => void} f - */ - - - _createClass(WebSocketClient, [{ - key: "onOpen", - value: function onOpen(f) { - this.client.onopen = f; - } - /** - * @param {(...args: any[]) => void} f - */ - - }, { - key: "onClose", - value: function onClose(f) { - this.client.onclose = f; - } // call f with the message string as the first argument - - /** - * @param {(...args: any[]) => void} f - */ - - }, { - key: "onMessage", - value: function onMessage(f) { - this.client.onmessage = function (e) { - f(e.data); - }; - } - }]); - - return WebSocketClient; -}(); - - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/index.js?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10": -/*!**********************************************************************************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/index.js?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10 ***! - \**********************************************************************************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -var __resourceQuery = "?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! webpack/hot/log.js */ "./node_modules/webpack/hot/log.js"); -/* harmony import */ var webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/stripAnsi.js */ "./node_modules/webpack-dev-server/client/utils/stripAnsi.js"); -/* harmony import */ var _utils_parseURL_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/parseURL.js */ "./node_modules/webpack-dev-server/client/utils/parseURL.js"); -/* harmony import */ var _socket_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./socket.js */ "./node_modules/webpack-dev-server/client/socket.js"); -/* harmony import */ var _overlay_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./overlay.js */ "./node_modules/webpack-dev-server/client/overlay.js"); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -/* harmony import */ var _utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/sendMessage.js */ "./node_modules/webpack-dev-server/client/utils/sendMessage.js"); -/* harmony import */ var _utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/reloadApp.js */ "./node_modules/webpack-dev-server/client/utils/reloadApp.js"); -/* harmony import */ var _utils_createSocketURL_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/createSocketURL.js */ "./node_modules/webpack-dev-server/client/utils/createSocketURL.js"); -/* global __resourceQuery, __webpack_hash__ */ -/// - - - - - - - - - -/** - * @typedef {Object} Options - * @property {boolean} hot - * @property {boolean} liveReload - * @property {boolean} progress - * @property {boolean | { warnings?: boolean, errors?: boolean, trustedTypesPolicyName?: string }} overlay - * @property {string} [logging] - * @property {number} [reconnect] - */ - -/** - * @typedef {Object} Status - * @property {boolean} isUnloading - * @property {string} currentHash - * @property {string} [previousHash] - */ - -/** - * @type {Status} - */ - -var status = { - isUnloading: false, - // TODO Workaround for webpack v4, `__webpack_hash__` is not replaced without HotModuleReplacement - // eslint-disable-next-line camelcase - currentHash: true ? __webpack_require__.h() : 0 -}; -/** @type {Options} */ - -var options = { - hot: false, - liveReload: false, - progress: false, - overlay: false -}; -var parsedResourceQuery = (0,_utils_parseURL_js__WEBPACK_IMPORTED_MODULE_2__["default"])(__resourceQuery); - -if (parsedResourceQuery.hot === "true") { - options.hot = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Hot Module Replacement enabled."); -} - -if (parsedResourceQuery["live-reload"] === "true") { - options.liveReload = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Live Reloading enabled."); -} - -if (parsedResourceQuery.logging) { - options.logging = parsedResourceQuery.logging; -} - -if (typeof parsedResourceQuery.reconnect !== "undefined") { - options.reconnect = Number(parsedResourceQuery.reconnect); -} -/** - * @param {string} level - */ - - -function setAllLogLevel(level) { - // This is needed because the HMR logger operate separately from dev server logger - webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0___default().setLogLevel(level === "verbose" || level === "log" ? "info" : level); - (0,_utils_log_js__WEBPACK_IMPORTED_MODULE_5__.setLogLevel)(level); -} - -if (options.logging) { - setAllLogLevel(options.logging); -} - -self.addEventListener("beforeunload", function () { - status.isUnloading = true; -}); -var onSocketMessage = { - hot: function hot() { - if (parsedResourceQuery.hot === "false") { - return; - } - - options.hot = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Hot Module Replacement enabled."); - }, - liveReload: function liveReload() { - if (parsedResourceQuery["live-reload"] === "false") { - return; - } - - options.liveReload = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Live Reloading enabled."); - }, - invalid: function invalid() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("App updated. Recompiling..."); // Fixes #1042. overlay doesn't clear if errors are fixed but warnings remain. - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Invalid"); - }, - - /** - * @param {string} hash - */ - hash: function hash(_hash) { - status.previousHash = status.currentHash; - status.currentHash = _hash; - }, - logging: setAllLogLevel, - - /** - * @param {boolean} value - */ - overlay: function overlay(value) { - if (typeof document === "undefined") { - return; - } - - options.overlay = value; - }, - - /** - * @param {number} value - */ - reconnect: function reconnect(value) { - if (parsedResourceQuery.reconnect === "false") { - return; - } - - options.reconnect = value; - }, - - /** - * @param {boolean} value - */ - progress: function progress(value) { - options.progress = value; - }, - - /** - * @param {{ pluginName?: string, percent: number, msg: string }} data - */ - "progress-update": function progressUpdate(data) { - if (options.progress) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(data.pluginName ? "[".concat(data.pluginName, "] ") : "").concat(data.percent, "% - ").concat(data.msg, ".")); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Progress", data); - }, - "still-ok": function stillOk() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Nothing changed."); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("StillOk"); - }, - ok: function ok() { - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Ok"); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__["default"])(options, status); - }, - // TODO: remove in v5 in favor of 'static-changed' - - /** - * @param {string} file - */ - "content-changed": function contentChanged(file) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(file ? "\"".concat(file, "\"") : "Content", " from static directory was changed. Reloading...")); - self.location.reload(); - }, - - /** - * @param {string} file - */ - "static-changed": function staticChanged(file) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(file ? "\"".concat(file, "\"") : "Content", " from static directory was changed. Reloading...")); - self.location.reload(); - }, - - /** - * @param {Error[]} warnings - * @param {any} params - */ - warnings: function warnings(_warnings, params) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.warn("Warnings while compiling."); - - var printableWarnings = _warnings.map(function (error) { - var _formatProblem = (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.formatProblem)("warning", error), - header = _formatProblem.header, - body = _formatProblem.body; - - return "".concat(header, "\n").concat((0,_utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__["default"])(body)); - }); - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Warnings", printableWarnings); - - for (var i = 0; i < printableWarnings.length; i++) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.warn(printableWarnings[i]); - } - - var needShowOverlayForWarnings = typeof options.overlay === "boolean" ? options.overlay : options.overlay && options.overlay.warnings; - - if (needShowOverlayForWarnings) { - var trustedTypesPolicyName = typeof options.overlay === "object" && options.overlay.trustedTypesPolicyName; - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.show)("warning", _warnings, trustedTypesPolicyName || null); - } - - if (params && params.preventReloading) { - return; - } - - (0,_utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__["default"])(options, status); - }, - - /** - * @param {Error[]} errors - */ - errors: function errors(_errors) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error("Errors while compiling. Reload prevented."); - - var printableErrors = _errors.map(function (error) { - var _formatProblem2 = (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.formatProblem)("error", error), - header = _formatProblem2.header, - body = _formatProblem2.body; - - return "".concat(header, "\n").concat((0,_utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__["default"])(body)); - }); - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Errors", printableErrors); - - for (var i = 0; i < printableErrors.length; i++) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error(printableErrors[i]); - } - - var needShowOverlayForErrors = typeof options.overlay === "boolean" ? options.overlay : options.overlay && options.overlay.errors; - - if (needShowOverlayForErrors) { - var trustedTypesPolicyName = typeof options.overlay === "object" && options.overlay.trustedTypesPolicyName; - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.show)("error", _errors, trustedTypesPolicyName || null); - } - }, - - /** - * @param {Error} error - */ - error: function error(_error) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error(_error); - }, - close: function close() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Disconnected!"); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Close"); - } -}; -var socketURL = (0,_utils_createSocketURL_js__WEBPACK_IMPORTED_MODULE_8__["default"])(parsedResourceQuery); -(0,_socket_js__WEBPACK_IMPORTED_MODULE_3__["default"])(socketURL, onSocketMessage, options.reconnect); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/modules/logger/index.js": -/*!************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/modules/logger/index.js ***! - \************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -/******/ (function() { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./client-src/modules/logger/SyncBailHookFake.js": -/*!*******************************************************!*\ - !*** ./client-src/modules/logger/SyncBailHookFake.js ***! - \*******************************************************/ -/***/ (function(module) { - - -/** - * Client stub for tapable SyncBailHook - */ - -module.exports = function clientTapableSyncBailHook() { - return { - call: function call() {} - }; -}; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/Logger.js": -/*!****************************************************!*\ - !*** ./node_modules/webpack/lib/logging/Logger.js ***! - \****************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _iterableToArray(iter) { - if (typeof (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }) !== "undefined" && iter[(typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }).iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) { - arr2[i] = arr[i]; - } - - return arr2; -} - -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} - -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); - return Constructor; -} - -var LogType = Object.freeze({ - error: - /** @type {"error"} */ - "error", - // message, c style arguments - warn: - /** @type {"warn"} */ - "warn", - // message, c style arguments - info: - /** @type {"info"} */ - "info", - // message, c style arguments - log: - /** @type {"log"} */ - "log", - // message, c style arguments - debug: - /** @type {"debug"} */ - "debug", - // message, c style arguments - trace: - /** @type {"trace"} */ - "trace", - // no arguments - group: - /** @type {"group"} */ - "group", - // [label] - groupCollapsed: - /** @type {"groupCollapsed"} */ - "groupCollapsed", - // [label] - groupEnd: - /** @type {"groupEnd"} */ - "groupEnd", - // [label] - profile: - /** @type {"profile"} */ - "profile", - // [profileName] - profileEnd: - /** @type {"profileEnd"} */ - "profileEnd", - // [profileName] - time: - /** @type {"time"} */ - "time", - // name, time as [seconds, nanoseconds] - clear: - /** @type {"clear"} */ - "clear", - // no arguments - status: - /** @type {"status"} */ - "status" // message, arguments - -}); -exports.LogType = LogType; -/** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */ - -var LOG_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger raw log method"); -var TIMERS_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger times"); -var TIMERS_AGGREGATES_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger aggregated times"); - -var WebpackLogger = /*#__PURE__*/function () { - /** - * @param {function(LogTypeEnum, any[]=): void} log log function - * @param {function(string | function(): string): WebpackLogger} getChildLogger function to create child logger - */ - function WebpackLogger(log, getChildLogger) { - _classCallCheck(this, WebpackLogger); - - this[LOG_SYMBOL] = log; - this.getChildLogger = getChildLogger; - } - - _createClass(WebpackLogger, [{ - key: "error", - value: function error() { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - this[LOG_SYMBOL](LogType.error, args); - } - }, { - key: "warn", - value: function warn() { - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - this[LOG_SYMBOL](LogType.warn, args); - } - }, { - key: "info", - value: function info() { - for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - this[LOG_SYMBOL](LogType.info, args); - } - }, { - key: "log", - value: function log() { - for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - args[_key4] = arguments[_key4]; - } - - this[LOG_SYMBOL](LogType.log, args); - } - }, { - key: "debug", - value: function debug() { - for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - args[_key5] = arguments[_key5]; - } - - this[LOG_SYMBOL](LogType.debug, args); - } - }, { - key: "assert", - value: function assert(assertion) { - if (!assertion) { - for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) { - args[_key6 - 1] = arguments[_key6]; - } - - this[LOG_SYMBOL](LogType.error, args); - } - } - }, { - key: "trace", - value: function trace() { - this[LOG_SYMBOL](LogType.trace, ["Trace"]); - } - }, { - key: "clear", - value: function clear() { - this[LOG_SYMBOL](LogType.clear); - } - }, { - key: "status", - value: function status() { - for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { - args[_key7] = arguments[_key7]; - } - - this[LOG_SYMBOL](LogType.status, args); - } - }, { - key: "group", - value: function group() { - for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) { - args[_key8] = arguments[_key8]; - } - - this[LOG_SYMBOL](LogType.group, args); - } - }, { - key: "groupCollapsed", - value: function groupCollapsed() { - for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) { - args[_key9] = arguments[_key9]; - } - - this[LOG_SYMBOL](LogType.groupCollapsed, args); - } - }, { - key: "groupEnd", - value: function groupEnd() { - for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) { - args[_key10] = arguments[_key10]; - } - - this[LOG_SYMBOL](LogType.groupEnd, args); - } - }, { - key: "profile", - value: function profile(label) { - this[LOG_SYMBOL](LogType.profile, [label]); - } - }, { - key: "profileEnd", - value: function profileEnd(label) { - this[LOG_SYMBOL](LogType.profileEnd, [label]); - } - }, { - key: "time", - value: function time(label) { - this[TIMERS_SYMBOL] = this[TIMERS_SYMBOL] || new Map(); - this[TIMERS_SYMBOL].set(label, process.hrtime()); - } - }, { - key: "timeLog", - value: function timeLog(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeLog()")); - } - - var time = process.hrtime(prev); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }, { - key: "timeEnd", - value: function timeEnd(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeEnd()")); - } - - var time = process.hrtime(prev); - this[TIMERS_SYMBOL].delete(label); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }, { - key: "timeAggregate", - value: function timeAggregate(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeAggregate()")); - } - - var time = process.hrtime(prev); - this[TIMERS_SYMBOL].delete(label); - this[TIMERS_AGGREGATES_SYMBOL] = this[TIMERS_AGGREGATES_SYMBOL] || new Map(); - var current = this[TIMERS_AGGREGATES_SYMBOL].get(label); - - if (current !== undefined) { - if (time[1] + current[1] > 1e9) { - time[0] += current[0] + 1; - time[1] = time[1] - 1e9 + current[1]; - } else { - time[0] += current[0]; - time[1] += current[1]; - } - } - - this[TIMERS_AGGREGATES_SYMBOL].set(label, time); - } - }, { - key: "timeAggregateEnd", - value: function timeAggregateEnd(label) { - if (this[TIMERS_AGGREGATES_SYMBOL] === undefined) return; - var time = this[TIMERS_AGGREGATES_SYMBOL].get(label); - if (time === undefined) return; - this[TIMERS_AGGREGATES_SYMBOL].delete(label); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }]); - - return WebpackLogger; -}(); - -exports.Logger = WebpackLogger; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/createConsoleLogger.js": -/*!*****************************************************************!*\ - !*** ./node_modules/webpack/lib/logging/createConsoleLogger.js ***! - \*****************************************************************/ -/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_10785__) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _iterableToArray(iter) { - if (typeof (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }) !== "undefined" && iter[(typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }).iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) { - arr2[i] = arr[i]; - } - - return arr2; -} - -var _require = __nested_webpack_require_10785__(/*! ./Logger */ "./node_modules/webpack/lib/logging/Logger.js"), - LogType = _require.LogType; -/** @typedef {import("../../declarations/WebpackOptions").FilterItemTypes} FilterItemTypes */ - -/** @typedef {import("../../declarations/WebpackOptions").FilterTypes} FilterTypes */ - -/** @typedef {import("./Logger").LogTypeEnum} LogTypeEnum */ - -/** @typedef {function(string): boolean} FilterFunction */ - -/** - * @typedef {Object} LoggerConsole - * @property {function(): void} clear - * @property {function(): void} trace - * @property {(...args: any[]) => void} info - * @property {(...args: any[]) => void} log - * @property {(...args: any[]) => void} warn - * @property {(...args: any[]) => void} error - * @property {(...args: any[]) => void=} debug - * @property {(...args: any[]) => void=} group - * @property {(...args: any[]) => void=} groupCollapsed - * @property {(...args: any[]) => void=} groupEnd - * @property {(...args: any[]) => void=} status - * @property {(...args: any[]) => void=} profile - * @property {(...args: any[]) => void=} profileEnd - * @property {(...args: any[]) => void=} logTime - */ - -/** - * @typedef {Object} LoggerOptions - * @property {false|true|"none"|"error"|"warn"|"info"|"log"|"verbose"} level loglevel - * @property {FilterTypes|boolean} debug filter for debug logging - * @property {LoggerConsole} console the console to log to - */ - -/** - * @param {FilterItemTypes} item an input item - * @returns {FilterFunction} filter function - */ - - -var filterToFunction = function filterToFunction(item) { - if (typeof item === "string") { - var regExp = new RegExp("[\\\\/]".concat(item.replace( // eslint-disable-next-line no-useless-escape - /[-[\]{}()*+?.\\^$|]/g, "\\$&"), "([\\\\/]|$|!|\\?)")); - return function (ident) { - return regExp.test(ident); - }; - } - - if (item && typeof item === "object" && typeof item.test === "function") { - return function (ident) { - return item.test(ident); - }; - } - - if (typeof item === "function") { - return item; - } - - if (typeof item === "boolean") { - return function () { - return item; - }; - } -}; -/** - * @enum {number} - */ - - -var LogLevel = { - none: 6, - false: 6, - error: 5, - warn: 4, - info: 3, - log: 2, - true: 2, - verbose: 1 -}; -/** - * @param {LoggerOptions} options options object - * @returns {function(string, LogTypeEnum, any[]): void} logging function - */ - -module.exports = function (_ref) { - var _ref$level = _ref.level, - level = _ref$level === void 0 ? "info" : _ref$level, - _ref$debug = _ref.debug, - debug = _ref$debug === void 0 ? false : _ref$debug, - console = _ref.console; - var debugFilters = typeof debug === "boolean" ? [function () { - return debug; - }] : - /** @type {FilterItemTypes[]} */ - [].concat(debug).map(filterToFunction); - /** @type {number} */ - - var loglevel = LogLevel["".concat(level)] || 0; - /** - * @param {string} name name of the logger - * @param {LogTypeEnum} type type of the log entry - * @param {any[]} args arguments of the log entry - * @returns {void} - */ - - var logger = function logger(name, type, args) { - var labeledArgs = function labeledArgs() { - if (Array.isArray(args)) { - if (args.length > 0 && typeof args[0] === "string") { - return ["[".concat(name, "] ").concat(args[0])].concat(_toConsumableArray(args.slice(1))); - } else { - return ["[".concat(name, "]")].concat(_toConsumableArray(args)); - } - } else { - return []; - } - }; - - var debug = debugFilters.some(function (f) { - return f(name); - }); - - switch (type) { - case LogType.debug: - if (!debug) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.debug === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.debug.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.log: - if (!debug && loglevel > LogLevel.log) return; - console.log.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.info: - if (!debug && loglevel > LogLevel.info) return; - console.info.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.warn: - if (!debug && loglevel > LogLevel.warn) return; - console.warn.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.error: - if (!debug && loglevel > LogLevel.error) return; - console.error.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.trace: - if (!debug) return; - console.trace(); - break; - - case LogType.groupCollapsed: - if (!debug && loglevel > LogLevel.log) return; - - if (!debug && loglevel > LogLevel.verbose) { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.groupCollapsed === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.groupCollapsed.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - } - - // falls through - - case LogType.group: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.group === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.group.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.groupEnd: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.groupEnd === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.groupEnd(); - } - - break; - - case LogType.time: - { - if (!debug && loglevel > LogLevel.log) return; - var ms = args[1] * 1000 + args[2] / 1000000; - var msg = "[".concat(name, "] ").concat(args[0], ": ").concat(ms, " ms"); - - if (typeof console.logTime === "function") { - console.logTime(msg); - } else { - console.log(msg); - } - - break; - } - - case LogType.profile: - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.profile === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.profile.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.profileEnd: - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.profileEnd === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.profileEnd.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.clear: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.clear === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.clear(); - } - - break; - - case LogType.status: - if (!debug && loglevel > LogLevel.info) return; - - if (typeof console.status === "function") { - if (args.length === 0) { - console.status(); - } else { - console.status.apply(console, _toConsumableArray(labeledArgs())); - } - } else { - if (args.length !== 0) { - console.info.apply(console, _toConsumableArray(labeledArgs())); - } - } - - break; - - default: - throw new Error("Unexpected LogType ".concat(type)); - } - }; - - return logger; -}; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/runtime.js": -/*!*****************************************************!*\ - !*** ./node_modules/webpack/lib/logging/runtime.js ***! - \*****************************************************/ -/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_20872__) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _extends() { - _extends = Object.assign ? Object.assign.bind() : function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - return _extends.apply(this, arguments); -} - -var SyncBailHook = __nested_webpack_require_20872__(/*! tapable/lib/SyncBailHook */ "./client-src/modules/logger/SyncBailHookFake.js"); - -var _require = __nested_webpack_require_20872__(/*! ./Logger */ "./node_modules/webpack/lib/logging/Logger.js"), - Logger = _require.Logger; - -var createConsoleLogger = __nested_webpack_require_20872__(/*! ./createConsoleLogger */ "./node_modules/webpack/lib/logging/createConsoleLogger.js"); -/** @type {createConsoleLogger.LoggerOptions} */ - - -var currentDefaultLoggerOptions = { - level: "info", - debug: false, - console: console -}; -var currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions); -/** - * @param {string} name name of the logger - * @returns {Logger} a logger - */ - -exports.getLogger = function (name) { - return new Logger(function (type, args) { - if (exports.hooks.log.call(name, type, args) === undefined) { - currentDefaultLogger(name, type, args); - } - }, function (childName) { - return exports.getLogger("".concat(name, "/").concat(childName)); - }); -}; -/** - * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options - * @returns {void} - */ - - -exports.configureDefaultLogger = function (options) { - _extends(currentDefaultLoggerOptions, options); - - currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions); -}; - -exports.hooks = { - log: new SyncBailHook(["origin", "type", "args"]) -}; - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __nested_webpack_require_23009__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __nested_webpack_require_23009__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ !function() { -/******/ // define getter functions for harmony exports -/******/ __nested_webpack_require_23009__.d = function(exports, definition) { -/******/ for(var key in definition) { -/******/ if(__nested_webpack_require_23009__.o(definition, key) && !__nested_webpack_require_23009__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ !function() { -/******/ __nested_webpack_require_23009__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -/******/ }(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ !function() { -/******/ // define __esModule on exports -/******/ __nested_webpack_require_23009__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ }(); -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. -!function() { -/*!********************************************!*\ - !*** ./client-src/modules/logger/index.js ***! - \********************************************/ -__nested_webpack_require_23009__.r(__webpack_exports__); -/* harmony export */ __nested_webpack_require_23009__.d(__webpack_exports__, { -/* harmony export */ "default": function() { return /* reexport default export from named module */ webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__; } -/* harmony export */ }); -/* harmony import */ var webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_23009__(/*! webpack/lib/logging/runtime.js */ "./node_modules/webpack/lib/logging/runtime.js"); - -}(); -var __webpack_export_target__ = exports; -for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i]; -if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true }); -/******/ })() -; - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/overlay.js": -/*!***********************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/overlay.js ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "formatProblem": function() { return /* binding */ formatProblem; }, -/* harmony export */ "hide": function() { return /* binding */ hide; }, -/* harmony export */ "show": function() { return /* binding */ show; } -/* harmony export */ }); -/* harmony import */ var ansi_html_community__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ansi-html-community */ "./node_modules/ansi-html-community/index.js"); -/* harmony import */ var ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(ansi_html_community__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! html-entities */ "./node_modules/html-entities/lib/index.js"); -/* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(html_entities__WEBPACK_IMPORTED_MODULE_1__); -// The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app) -// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware). - - -var colors = { - reset: ["transparent", "transparent"], - black: "181818", - red: "E36049", - green: "B3CB74", - yellow: "FFD080", - blue: "7CAFC2", - magenta: "7FACCA", - cyan: "C3C2EF", - lightgrey: "EBE7E3", - darkgrey: "6D7891" -}; -/** @type {HTMLIFrameElement | null | undefined} */ - -var iframeContainerElement; -/** @type {HTMLDivElement | null | undefined} */ - -var containerElement; -/** @type {Array<(element: HTMLDivElement) => void>} */ - -var onLoadQueue = []; -/** @type {TrustedTypePolicy | undefined} */ - -var overlayTrustedTypesPolicy; -ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default().setColors(colors); -/** - * @param {string | null} trustedTypesPolicyName - */ - -function createContainer(trustedTypesPolicyName) { - // Enable Trusted Types if they are available in the current browser. - if (window.trustedTypes) { - overlayTrustedTypesPolicy = window.trustedTypes.createPolicy(trustedTypesPolicyName || "webpack-dev-server#overlay", { - createHTML: function createHTML(value) { - return value; - } - }); - } - - iframeContainerElement = document.createElement("iframe"); - iframeContainerElement.id = "webpack-dev-server-client-overlay"; - iframeContainerElement.src = "about:blank"; - iframeContainerElement.style.position = "fixed"; - iframeContainerElement.style.left = 0; - iframeContainerElement.style.top = 0; - iframeContainerElement.style.right = 0; - iframeContainerElement.style.bottom = 0; - iframeContainerElement.style.width = "100vw"; - iframeContainerElement.style.height = "100vh"; - iframeContainerElement.style.border = "none"; - iframeContainerElement.style.zIndex = 9999999999; - - iframeContainerElement.onload = function () { - containerElement = - /** @type {Document} */ - - /** @type {HTMLIFrameElement} */ - iframeContainerElement.contentDocument.createElement("div"); - containerElement.id = "webpack-dev-server-client-overlay-div"; - containerElement.style.position = "fixed"; - containerElement.style.boxSizing = "border-box"; - containerElement.style.left = 0; - containerElement.style.top = 0; - containerElement.style.right = 0; - containerElement.style.bottom = 0; - containerElement.style.width = "100vw"; - containerElement.style.height = "100vh"; - containerElement.style.backgroundColor = "rgba(0, 0, 0, 0.85)"; - containerElement.style.color = "#E8E8E8"; - containerElement.style.fontFamily = "Menlo, Consolas, monospace"; - containerElement.style.fontSize = "large"; - containerElement.style.padding = "2rem"; - containerElement.style.lineHeight = "1.2"; - containerElement.style.whiteSpace = "pre-wrap"; - containerElement.style.overflow = "auto"; - var headerElement = document.createElement("span"); - headerElement.innerText = "Compiled with problems:"; - var closeButtonElement = document.createElement("button"); - closeButtonElement.innerText = "X"; - closeButtonElement.style.background = "transparent"; - closeButtonElement.style.border = "none"; - closeButtonElement.style.fontSize = "20px"; - closeButtonElement.style.fontWeight = "bold"; - closeButtonElement.style.color = "white"; - closeButtonElement.style.cursor = "pointer"; - closeButtonElement.style.cssFloat = "right"; // @ts-ignore - - closeButtonElement.style.styleFloat = "right"; - closeButtonElement.addEventListener("click", function () { - hide(); - }); - containerElement.appendChild(headerElement); - containerElement.appendChild(closeButtonElement); - containerElement.appendChild(document.createElement("br")); - containerElement.appendChild(document.createElement("br")); - /** @type {Document} */ - - /** @type {HTMLIFrameElement} */ - iframeContainerElement.contentDocument.body.appendChild(containerElement); - onLoadQueue.forEach(function (onLoad) { - onLoad( - /** @type {HTMLDivElement} */ - containerElement); - }); - onLoadQueue = []; - /** @type {HTMLIFrameElement} */ - - iframeContainerElement.onload = null; - }; - - document.body.appendChild(iframeContainerElement); -} -/** - * @param {(element: HTMLDivElement) => void} callback - * @param {string | null} trustedTypesPolicyName - */ - - -function ensureOverlayExists(callback, trustedTypesPolicyName) { - if (containerElement) { - // Everything is ready, call the callback right away. - callback(containerElement); - return; - } - - onLoadQueue.push(callback); - - if (iframeContainerElement) { - return; - } - - createContainer(trustedTypesPolicyName); -} // Successful compilation. - - -function hide() { - if (!iframeContainerElement) { - return; - } // Clean up and reset internal state. - - - document.body.removeChild(iframeContainerElement); - iframeContainerElement = null; - containerElement = null; -} -/** - * @param {string} type - * @param {string | { file?: string, moduleName?: string, loc?: string, message?: string }} item - * @returns {{ header: string, body: string }} - */ - - -function formatProblem(type, item) { - var header = type === "warning" ? "WARNING" : "ERROR"; - var body = ""; - - if (typeof item === "string") { - body += item; - } else { - var file = item.file || ""; // eslint-disable-next-line no-nested-ternary - - var moduleName = item.moduleName ? item.moduleName.indexOf("!") !== -1 ? "".concat(item.moduleName.replace(/^(\s|\S)*!/, ""), " (").concat(item.moduleName, ")") : "".concat(item.moduleName) : ""; - var loc = item.loc; - header += "".concat(moduleName || file ? " in ".concat(moduleName ? "".concat(moduleName).concat(file ? " (".concat(file, ")") : "") : file).concat(loc ? " ".concat(loc) : "") : ""); - body += item.message || ""; - } - - return { - header: header, - body: body - }; -} // Compilation with errors (e.g. syntax error or missing modules). - -/** - * @param {string} type - * @param {Array} messages - * @param {string | null} trustedTypesPolicyName - */ - - -function show(type, messages, trustedTypesPolicyName) { - ensureOverlayExists(function () { - messages.forEach(function (message) { - var entryElement = document.createElement("div"); - var typeElement = document.createElement("span"); - - var _formatProblem = formatProblem(type, message), - header = _formatProblem.header, - body = _formatProblem.body; - - typeElement.innerText = header; - typeElement.style.color = "#".concat(colors.red); // Make it look similar to our terminal. - - var text = ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default()((0,html_entities__WEBPACK_IMPORTED_MODULE_1__.encode)(body)); - var messageTextNode = document.createElement("div"); - messageTextNode.innerHTML = overlayTrustedTypesPolicy ? overlayTrustedTypesPolicy.createHTML(text) : text; - entryElement.appendChild(typeElement); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(messageTextNode); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(document.createElement("br")); - /** @type {HTMLDivElement} */ - - containerElement.appendChild(entryElement); - }); - }, trustedTypesPolicyName); -} - - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/socket.js": -/*!**********************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/socket.js ***! - \**********************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "client": function() { return /* binding */ client; } -/* harmony export */ }); -/* harmony import */ var _clients_WebSocketClient_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clients/WebSocketClient.js */ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js"); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -/* provided dependency */ var __webpack_dev_server_client__ = __webpack_require__(/*! ./node_modules/webpack-dev-server/client/clients/WebSocketClient.js */ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js"); -/* global __webpack_dev_server_client__ */ - - // this WebsocketClient is here as a default fallback, in case the client is not injected - -/* eslint-disable camelcase */ - -var Client = // eslint-disable-next-line no-nested-ternary -typeof __webpack_dev_server_client__ !== "undefined" ? typeof __webpack_dev_server_client__.default !== "undefined" ? __webpack_dev_server_client__.default : __webpack_dev_server_client__ : _clients_WebSocketClient_js__WEBPACK_IMPORTED_MODULE_0__["default"]; -/* eslint-enable camelcase */ - -var retries = 0; -var maxRetries = 10; // Initialized client is exported so external consumers can utilize the same instance -// It is mutable to enforce singleton -// eslint-disable-next-line import/no-mutable-exports - -var client = null; -/** - * @param {string} url - * @param {{ [handler: string]: (data?: any, params?: any) => any }} handlers - * @param {number} [reconnect] - */ - -var socket = function initSocket(url, handlers, reconnect) { - client = new Client(url); - client.onOpen(function () { - retries = 0; - - if (typeof reconnect !== "undefined") { - maxRetries = reconnect; - } - }); - client.onClose(function () { - if (retries === 0) { - handlers.close(); - } // Try to reconnect. - - - client = null; // After 10 retries stop trying, to prevent logspam. - - if (retries < maxRetries) { - // Exponentially increase timeout to reconnect. - // Respectfully copied from the package `got`. - // eslint-disable-next-line no-restricted-properties - var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100; - retries += 1; - _utils_log_js__WEBPACK_IMPORTED_MODULE_1__.log.info("Trying to reconnect..."); - setTimeout(function () { - socket(url, handlers, reconnect); - }, retryInMs); - } - }); - client.onMessage( - /** - * @param {any} data - */ - function (data) { - var message = JSON.parse(data); - - if (handlers[message.type]) { - handlers[message.type](message.data, message.params); - } - }); -}; - -/* harmony default export */ __webpack_exports__["default"] = (socket); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/createSocketURL.js": -/*!*************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/createSocketURL.js ***! - \*************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/** - * @param {{ protocol?: string, auth?: string, hostname?: string, port?: string, pathname?: string, search?: string, hash?: string, slashes?: boolean }} objURL - * @returns {string} - */ -function format(objURL) { - var protocol = objURL.protocol || ""; - - if (protocol && protocol.substr(-1) !== ":") { - protocol += ":"; - } - - var auth = objURL.auth || ""; - - if (auth) { - auth = encodeURIComponent(auth); - auth = auth.replace(/%3A/i, ":"); - auth += "@"; - } - - var host = ""; - - if (objURL.hostname) { - host = auth + (objURL.hostname.indexOf(":") === -1 ? objURL.hostname : "[".concat(objURL.hostname, "]")); - - if (objURL.port) { - host += ":".concat(objURL.port); - } - } - - var pathname = objURL.pathname || ""; - - if (objURL.slashes) { - host = "//".concat(host || ""); - - if (pathname && pathname.charAt(0) !== "/") { - pathname = "/".concat(pathname); - } - } else if (!host) { - host = ""; - } - - var search = objURL.search || ""; - - if (search && search.charAt(0) !== "?") { - search = "?".concat(search); - } - - var hash = objURL.hash || ""; - - if (hash && hash.charAt(0) !== "#") { - hash = "#".concat(hash); - } - - pathname = pathname.replace(/[?#]/g, - /** - * @param {string} match - * @returns {string} - */ - function (match) { - return encodeURIComponent(match); - }); - search = search.replace("#", "%23"); - return "".concat(protocol).concat(host).concat(pathname).concat(search).concat(hash); -} -/** - * @param {URL & { fromCurrentScript?: boolean }} parsedURL - * @returns {string} - */ - - -function createSocketURL(parsedURL) { - var hostname = parsedURL.hostname; // Node.js module parses it as `::` - // `new URL(urlString, [baseURLString])` parses it as '[::]' - - var isInAddrAny = hostname === "0.0.0.0" || hostname === "::" || hostname === "[::]"; // why do we need this check? - // hostname n/a for file protocol (example, when using electron, ionic) - // see: https://github.com/webpack/webpack-dev-server/pull/384 - - if (isInAddrAny && self.location.hostname && self.location.protocol.indexOf("http") === 0) { - hostname = self.location.hostname; - } - - var socketURLProtocol = parsedURL.protocol || self.location.protocol; // When https is used in the app, secure web sockets are always necessary because the browser doesn't accept non-secure web sockets. - - if (socketURLProtocol === "auto:" || hostname && isInAddrAny && self.location.protocol === "https:") { - socketURLProtocol = self.location.protocol; - } - - socketURLProtocol = socketURLProtocol.replace(/^(?:http|.+-extension|file)/i, "ws"); - var socketURLAuth = ""; // `new URL(urlString, [baseURLstring])` doesn't have `auth` property - // Parse authentication credentials in case we need them - - if (parsedURL.username) { - socketURLAuth = parsedURL.username; // Since HTTP basic authentication does not allow empty username, - // we only include password if the username is not empty. - - if (parsedURL.password) { - // Result: : - socketURLAuth = socketURLAuth.concat(":", parsedURL.password); - } - } // In case the host is a raw IPv6 address, it can be enclosed in - // the brackets as the brackets are needed in the final URL string. - // Need to remove those as url.format blindly adds its own set of brackets - // if the host string contains colons. That would lead to non-working - // double brackets (e.g. [[::]]) host - // - // All of these web socket url params are optionally passed in through resourceQuery, - // so we need to fall back to the default if they are not provided - - - var socketURLHostname = (hostname || self.location.hostname || "localhost").replace(/^\[(.*)\]$/, "$1"); - var socketURLPort = parsedURL.port; - - if (!socketURLPort || socketURLPort === "0") { - socketURLPort = self.location.port; - } // If path is provided it'll be passed in via the resourceQuery as a - // query param so it has to be parsed out of the querystring in order for the - // client to open the socket to the correct location. - - - var socketURLPathname = "/ws"; - - if (parsedURL.pathname && !parsedURL.fromCurrentScript) { - socketURLPathname = parsedURL.pathname; - } - - return format({ - protocol: socketURLProtocol, - auth: socketURLAuth, - hostname: socketURLHostname, - port: socketURLPort, - pathname: socketURLPathname, - slashes: true - }); -} - -/* harmony default export */ __webpack_exports__["default"] = (createSocketURL); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js": -/*!********************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js ***! - \********************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/** - * @returns {string} - */ -function getCurrentScriptSource() { - // `document.currentScript` is the most accurate way to find the current script, - // but is not supported in all browsers. - if (document.currentScript) { - return document.currentScript.getAttribute("src"); - } // Fallback to getting all scripts running in the document. - - - var scriptElements = document.scripts || []; - var scriptElementsWithSrc = Array.prototype.filter.call(scriptElements, function (element) { - return element.getAttribute("src"); - }); - - if (scriptElementsWithSrc.length > 0) { - var currentScript = scriptElementsWithSrc[scriptElementsWithSrc.length - 1]; - return currentScript.getAttribute("src"); - } // Fail as there was no script to use. - - - throw new Error("[webpack-dev-server] Failed to get current script source."); -} - -/* harmony default export */ __webpack_exports__["default"] = (getCurrentScriptSource); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/log.js": -/*!*************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/log.js ***! - \*************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "log": function() { return /* binding */ log; }, -/* harmony export */ "setLogLevel": function() { return /* binding */ setLogLevel; } -/* harmony export */ }); -/* harmony import */ var _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modules/logger/index.js */ "./node_modules/webpack-dev-server/client/modules/logger/index.js"); -/* harmony import */ var _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0__); - -var name = "webpack-dev-server"; // default level is set on the client side, so it does not need -// to be set by the CLI or API - -var defaultLevel = "info"; // options new options, merge with old options - -/** - * @param {false | true | "none" | "error" | "warn" | "info" | "log" | "verbose"} level - * @returns {void} - */ - -function setLogLevel(level) { - _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default().configureDefaultLogger({ - level: level - }); -} - -setLogLevel(defaultLevel); -var log = _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default().getLogger(name); - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/parseURL.js": -/*!******************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/parseURL.js ***! - \******************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _getCurrentScriptSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getCurrentScriptSource.js */ "./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js"); - -/** - * @param {string} resourceQuery - * @returns {{ [key: string]: string | boolean }} - */ - -function parseURL(resourceQuery) { - /** @type {{ [key: string]: string }} */ - var options = {}; - - if (typeof resourceQuery === "string" && resourceQuery !== "") { - var searchParams = resourceQuery.slice(1).split("&"); - - for (var i = 0; i < searchParams.length; i++) { - var pair = searchParams[i].split("="); - options[pair[0]] = decodeURIComponent(pair[1]); - } - } else { - // Else, get the url from the
    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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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()},enable:function(t){t&&L.DomEvent.preventDefault(t),t&&L.DomEvent.stopPropagation(t),this._enabled||(this._enabled=!0,this.addHooks&&this.addHooks())},_createIcon:function(t,e,i){var o=this,n=this.options.toolbarIcon,a=n.className,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];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)}})})),console.log(t),L.OpacitiesAction=L.EditAction.extend({initialize:function(e,i,o){var n=i.editing._mode;(o=o||{}).toolbarIcon={svg:!0,html:"opacities",tooltip:"Set custom opacity",className:"lock"===n?"disabled":""},o.subToolbar=new L.Toolbar2({actions:t}),L.DistortableImage.action_map.o="lock"===n?"":"_toggleOpacities",L.EditAction.prototype.initialize.call(this,e,i,o)},addHooks:function(){var t=this,e=this._link;L.DomUtil.hasClass(e,"subtoolbar_enabled")?(L.DomUtil.removeClass(e,"subtoolbar_enabled"),setTimeout((function(){t.options.subToolbar._hide()}),100)):L.DomUtil.addClass(e,"subtoolbar_enabled"),L.IconUtil.toggleXlink(e,"opacities","cancel"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Cancel")}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 0ee5bdfb4..940af2f34 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\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 let 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 let movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n let sections = layer._image.src.split('/');\n let filename = sections[sections.length-1];\n let zc = layer.getCorners();\n let 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: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (let 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 (let 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 (let 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 (let 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 let 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 let 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 let 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 let 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\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 = 1;\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 (let 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 (let mode in L.DistortableImage.Edit.MODES) {\n let 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 (let 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 (let 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 (let 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 let map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n let 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 let corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n let 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 let overlay = this._overlay;\n let map = overlay._map;\n let img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n let downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n let height = downloadable.height;\n let width = downloadable.width;\n let nw = map.latLngToLayerPoint(overlay.getCorner(0));\n let ne = map.latLngToLayerPoint(overlay.getCorner(1));\n let sw = map.latLngToLayerPoint(overlay.getCorner(2));\n let 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 let 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 let 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 let ov = this._overlay;\n let 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 let 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 let ov = this._overlay;\n const eP = this.parentGroup;\n let 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 let 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 let 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 let 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 let 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 let mode = this.getMode();\n const eP = this.parentGroup;\n let modesArray = Object.keys(this.getModes());\n let idx = modesArray.indexOf(mode);\n let nextIdx = (idx + 1) % modesArray.length;\n let 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 var 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 enable(e) {\n if (e) { L.DomEvent.preventDefault(e); };\n if (e) { L.DomEvent.stopPropagation(e); };\n if (this._enabled) { return; };\n this._enabled = true;\n if (this.addHooks) { this.addHooks(); };\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 let 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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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 let 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 let 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\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\nconsole.log(opacities);\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.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 let mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n let 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 var 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 let 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 let 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 let overlay = this._handled;\n let map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n let formerLatLng = overlay.getCorner(this._corner);\n let newLatLng = this.getLatLng();\n let 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 let w = Math.abs(corner1.x - corner2.x);\n let 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 let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 let 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 let map = this._map;\n let 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 let map = this._map;\n let 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 var map = overlay._map;\n\n var 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 var 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 let 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 let 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 let s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n let d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n let 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","isNaN","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":"kCAAAA,EAAEC,sBAAwBD,EAAEE,aAAaC,OAAO,CAC9CC,QAAS,CACPC,UAAU,EACVC,WAAY,CACVC,eAAgB,iCAChBC,UAAW,0BACXC,UAAW,kCAIfC,WAV8C,SAUnCN,GACTJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEE,aAAaW,UAAUH,WAAWI,KAAKF,KAAMR,GAC/CJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAKP,SAAWO,KAAKR,QAAQC,UAG/BY,MAlB8C,SAkBxCC,GACJlB,EAAEE,aAAaW,UAAUI,MAAMH,KAAKF,KAAMM,GAE1CN,KAAKO,KAAOD,EAERN,KAAKP,UAAYO,KAAKQ,QAAQC,SAMlCT,KAAKU,GAAG,WAAYV,KAAKW,WAAYX,MACrCA,KAAKU,GAAG,cAAeV,KAAKY,cAAeZ,OAG7Ca,SAjC8C,WAkCxCb,KAAKQ,SAAWR,KAAKQ,QAAQM,UAEjCd,KAAKe,IAAI,WAAYf,KAAKW,WAAYX,MACtCA,KAAKe,IAAI,cAAef,KAAKY,cAAeZ,OAG9CW,WAxC8C,SAwCnCK,GACT,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASR,GAAGO,EAAO,CACnBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASR,GAAGO,EAAMM,aAAc,CAChCC,UAAWxB,KAAKyB,gBAEhBC,YAAa1B,KAAK2B,uBACjB3B,OAGLY,cAvD8C,SAuDhCI,GACZ,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASH,IAAIE,EAAO,CACpBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASH,IAAIE,EAAMM,aAAc,CACjCC,UAAWxB,KAAKyB,gBAChBC,YAAa1B,KAAK2B,uBACjB3B,OAGL2B,sBArE8C,SAqExBX,GAAG,WAClBhB,KAAKP,WAEVuB,EAAEY,iBAEF5B,KAAK6B,WAAU,SAACZ,GACd,IAAMa,EAAOb,EAAMT,QACfS,EAAMM,eAAiBP,EAAEe,QAAUD,EAAKE,YAC1C5C,EAAE6C,QAAQC,YAAYjB,EAAMM,aAAc,aACtC,EAAKY,gBACPlB,EAAMmB,WACN,EAAK5B,QAAQ6B,eAEb,EAAK7B,QAAQ8B,uBAMrBC,YAxF8C,SAwFlCC,GACV,OAAOpD,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAGlDY,aA5F8C,WA8F5C,OADiBnC,KAAK0C,YACNC,KAAK3C,KAAKuC,YAAYK,KAAK5C,QAG7C6C,iBAjG8C,SAiG7B7B,EAAGC,GACdD,EAAE8B,UAEA7B,EAAMT,QAAQwB,WAChB5C,EAAE6C,QAAQC,YAAYlB,EAAEe,OAAQ,aAIhC/B,KAAKmC,eAAkBlB,EAAMmB,WAC1BpC,KAAKQ,QAAQ8B,kBAGtBb,gBA7G8C,SA6G9BT,GAAG,WACZhB,KAAKP,WAEVO,KAAK6B,WAAU,SAACZ,GACVA,EAAMM,eAAiBP,EAAEe,OAC3Bd,EAAMmB,WAEN,EAAKS,iBAAiB7B,EAAGC,MAIzBD,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCI,mBA3H8C,SA2H3BJ,GACjB,IAEIgC,EAFER,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAGZP,KAAKuC,YAAYC,IAEtBxC,KAAK6B,WAAU,SAACZ,GAGd,IAFAA,EAAMgC,iBAAmB,GACzBhC,EAAMmB,WACDY,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACtB,IAAME,EAAIjC,EAAMkC,UAAUH,GAC1B/B,EAAMgC,iBAAiBD,GAAK1C,EAAI8C,mBAAmBF,QAKzD5B,cA5I8C,SA4IhCN,GACZ,IAAMwB,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAEjB,GAAKP,KAAKuC,YAAYC,GAAtB,CAEA,IAAMa,EAAU/C,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDG,EAAQd,EAAQS,iBAAiB,GAAGM,SAASF,GAEnDrD,KAAKwD,4BAA4BF,EAAOd,KAG1CiB,UAxJ8C,WAwJlC,WAGV,OAFiBzD,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAQ,EAAKrB,YAAYtB,IAAmB,SAAT0C,MAIvCE,QAjK8C,SAiKtCrB,GAAS,WAGf,OAFiBxC,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAO3C,IAAUuB,GAAW,EAAKD,YAAYtB,IAAmB,SAAT0C,MAI3DH,4BA1K8C,SA0KlBF,EAAOd,GACjC,IAEIQ,EAFEc,EAAe9D,KAAK6D,QAAQrB,GAC5BuB,EAAI,IAAI3E,EAAE4E,eAAe,GAAIV,EAAMW,EAAG,GAAIX,EAAMY,GAGtDJ,EAAaK,SAAQ,SAAClD,GACpB,IAAMmD,EAAc,GACpB,IAAKpB,EAAI,EAAGA,EAAI,EAAGA,IACjBoB,EAAYpB,GAAKe,EAAEM,UAAUpD,EAAMgC,iBAAiBD,IAEtD/B,EAAMqD,qBAAqBF,OAI/BG,kBAxL8C,SAwL5BC,GAIhB,OAHeA,EAAKC,QAAO,SAASC,EAAKC,GACvC,OAAOD,EAAMC,EAAIC,eAChB,GACaJ,EAAKK,QAGvBC,mBA/L8C,WAgM5C,IAAMC,EAAO,CACbA,OAAc,IA4Bd,OA1BA/E,KAAK6B,WAAU,SAASZ,GACtB,GAAIjB,KAAKuC,YAAYtB,GAAQ,CAC3B,IAAM+D,EAAW/D,EAAMgE,OAAOC,IAAIC,MAAM,KAClCC,EAAWJ,EAASA,EAASH,OAAO,GACpCQ,EAAKpE,EAAMqE,aACXC,EAAU,CACd,CAACC,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,MAE9BX,EAAKY,OAAOC,KAAK,CACfC,GAAI7F,KAAK8F,WAAW7E,GACpBiE,IAAKjE,EAAMgE,OAAOC,IAClBa,MAAO9E,EAAMgE,OAAOc,MACpBC,OAAQ/E,EAAMgE,OAAOe,OACrBC,gBAAiBb,EACjBc,MAAOX,EACPX,aAAcxF,EAAE+G,UAAUC,cAAcnF,QAG3CjB,MAEH+E,EAAKY,OAASZ,EAAKY,OAAOU,UAC1BtB,EAAKuB,iBAAmBtG,KAAKuE,kBAAkBQ,EAAKY,QAE7CZ,KAIX3F,EAAEmH,sBAAwB,SAASV,EAAIrG,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBwG,EAAIrG,K,eClOzCJ,EAAEoH,wBAA0BpH,EAAEqH,aAAalH,OAAO,CAEhDC,QAAS,CACPwG,OAAQ,IACRU,aAAa,EAEbC,aAAc,GACdlH,UAAU,EACVkE,KAAM,UACNiD,UAAU,GAGZ9G,WAZgD,SAYrC+G,EAAKrH,GACdJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAK2G,aAAe3G,KAAKR,QAAQmH,aACjC3G,KAAKP,SAAWO,KAAKR,QAAQC,SAC7BO,KAAK8G,UAAY9G,KAAKR,QAAQoH,SAC9B5G,KAAK+G,KAAOF,EACZ7G,KAAKgH,SAAW,IAGlB3G,MAvBgD,SAuB1CC,GAAK,WACTN,KAAKO,KAAOD,EACPN,KAAKuB,cAAgBvB,KAAKiH,aAE/B3G,EAAII,GAAG,YAAaV,KAAKkH,OAAQlH,MAE7BA,KAAKR,QAAQ+F,UACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QACzBjF,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAYV,KAAKuH,aAAcvH,OAK1CZ,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAAQ,WAIvC,GAHA,EAAKiG,UAAUC,YAAY,EAAKlG,cAChC,EAAKmG,uBAED,EAAKlI,QAAQwH,SAAU,CACzB,IAAMW,EAAQ,EAAKnI,QAAQwH,SAASY,KAAO,EAAI,MAAQ,MACvD,EAAKC,SAAS,EAAKrI,QAAQwH,SAASW,GAAQA,QAE5C,EAAKX,SAAW,CAACY,IAAK,EAAGE,IAAK,GAC9B,EAAKZ,SAIF,EAAKC,UACJ7G,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAY,EAAK6G,aAAc,GAK1C,IAAMQ,EAAe,EAAKC,cACtBD,GACF,EAAKE,GAAKF,EAAaG,OAAOC,KAAKJ,GAAc,IAC7C,EAAKE,GAAGxI,UAAY,EAAKe,QAAQC,WAEjC,EAAKhB,UAAY,EAAKe,QAAQC,SAClC,EAAKwH,GAAK,SAId7I,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACvDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MAMGM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAG7CA,KAAK6I,KAAK,QAGZhI,SArFgD,SAqFvCP,GACPlB,EAAE8B,SAASH,IAAIf,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACxDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MACHZ,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAExCA,KAAKQ,SAAWR,KAAKQ,QAAQM,UACjCd,KAAK6I,KAAK,UAEVzJ,EAAEqH,aAAaxG,UAAUY,SAASX,KAAKF,KAAMM,IAG/CoH,qBApGgD,WAqG9C,IAAMpH,EAAMN,KAAKO,KACXuI,EAAqB1J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,SAC3DyH,EAAsB5J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,UAC5D0H,EACFC,SAASJ,GAAsBI,SAASF,GACtCG,EAAcnJ,KAAKR,QAAQwG,OAC3BoD,EAAaF,SAASD,EAAcE,GACpCE,EAAS/I,EAAIgJ,QAAQhJ,EAAIiJ,aACzBC,EAASpK,EAAEqK,MAAML,EAAYD,GAAaO,SAAS,GACrD1J,KAAKR,QAAQ+F,QACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QAE7BvF,KAAKmH,SAAW,CACd7G,EAAIqJ,UAAUN,EAAO9F,SAASiG,IAC9BlJ,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIJ,KAI7BxJ,KAAK6J,mBAAqB,CACxB,OAAUR,EACV,OAAUG,EACV,KAAQlJ,EAAIwJ,WAGd9J,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,gBAGrCoD,aAlIgD,SAkInC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKoC,YAIvCkG,sBAvIgD,WAwI9C,IAAMhI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAC5CZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKoC,SAAUpC,OAGnDwI,qBA7IgD,WA8I9C,IAAMlI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAC3CZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKoC,SAAUpC,OAGpDkK,WAnJgD,WAoJ9C,OAAOlK,KAAK8G,WAGd1E,SAvJgD,WAwJ9C,IAAMN,EAAO9B,KAAKQ,QAClB,GAAKsB,EAAKE,UAOV,OALAF,EAAKQ,iBACLR,EAAKqI,eAELnK,KAAK8G,WAAY,EACjB9G,KAAK6I,KAAK,YACH7I,MAGToI,OAnKgD,SAmKzCpH,GACL,IAAMc,EAAO9B,KAAKQ,QACZyH,EAAKjI,KAAKiI,GAEhB,GAAKnG,EAAKE,UAAV,CAYA,GAXIhB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,GAGpChB,KAAKoK,wBAELpK,KAAK8G,WAAY,EACjBhF,EAAKO,cACLP,EAAKuI,eACLrK,KAAK6I,KAAK,WAGNZ,IAAMA,EAAG9F,eAKb,OAAOnC,KAJLA,KAAKoC,aAOTgI,sBA3LgD,WA4L9CpK,KAAKO,KAAKsB,WAAU,SAACZ,GACfA,aAAiB7B,EAAEoH,yBACrBvF,EAAMmB,eAKZkI,UAnMgD,SAmMtCC,EAAQC,GAChB,IAAM1I,EAAO9B,KAAKQ,QAalB,OAXAR,KAAKmH,SAASoD,GAAUC,EAExBxK,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT8K,sBApNgD,SAoN1BC,EAAMR,EAAQjK,GAClC,OAAIA,EAAId,QAAQwL,IAAIC,QAAU7L,EAAE8L,IAAID,SAKrB,IAATF,GACFI,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI,EACrCkH,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,GAAK,MAEzCiH,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI6G,EAAO,EAC5CK,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,EAAImH,KAAKC,IAAI,EAAGP,IAAS,KAEvDI,GAAcC,GATtB,IAAID,EACAC,GAYRG,WArOgD,SAqOrCC,GACT,IAAMlL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAGR,IAAK,IAAMyI,KAAKD,EACd,GAAIxL,KAAK8K,sBAAsBC,EAAMS,EAAUC,GAAInL,GAIjD,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAM4C,KAAKD,EACdxL,KAAKmH,SAASnE,GAAKwI,EAAUC,GAC7BzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGTsE,qBAtQgD,SAsQ3BoH,GACnB,IAAMpL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAER,IAAK,IAAMyI,KAAKC,EAAW,CACzB,IAAMnB,EAASjK,EAAIqL,mBAAmBD,EAAUD,IAEhD,GAAIzL,KAAK8K,sBAAsBC,EAAMR,EAAQjK,GAI3C,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAM4C,KAAKC,EACd1L,KAAKmH,SAASnE,GAAK1C,EAAIqL,mBAAmBD,EAAUD,IACpDzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT4L,QAxSgD,SAwSxCC,GACN,IAEI7I,EACAe,EAHEzD,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAG1BuC,EAAgB,GAEtB,GAAc,IAAVD,EAAJ,CAEA,IAAK7I,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EACCgJ,QAAQtJ,KAAKmD,UAAUH,IACvBO,SAAS8F,GACT0C,WAAWF,GACXjC,IAAIP,GACTyC,EAAc9I,GAAK1C,EAAIqJ,UAAU5F,GAKnC,OAFA/D,KAAKuL,WAAWO,GAET9L,OAGTgM,SA/TgD,WA+TzB,IAAdC,EAAc,uDAAP,MACRC,EAASlM,KAAKuB,aAAa4K,MAAM/M,EAAE6C,QAAQmK,WAC5CjH,MAAM,YAAY,GAClBkH,MAAM,GAAI,GACVlH,MAAM,KAELmH,EAAQJ,EAAO,GACfK,EAAQL,EAAO,GACfM,EAAQN,EAAO,GACfO,EAAQP,EAAO,GAEfQ,EAAcJ,EAAQG,EAAQF,EAAQC,EAExCG,EAAQvN,EAAEwN,SAASC,UAAUP,EAAOC,EAAO,OAU/C,OARIG,EAAc,IAChBC,GAASA,EAAQ,EAAItB,KAAKyB,IAAMzB,KAAKyB,IAGnCH,EAAQ,IACVA,EAAQ,EAAItB,KAAKyB,GAAKH,GAGR,QAATV,EACHZ,KAAK0B,MAAM3N,EAAEwN,SAASI,iBAAiBL,IACvCvN,EAAE6N,KAAKC,UAAUP,EAAO,IAG9B9E,SA3VgD,SA2VvC8E,GAAqB,IAAdV,EAAc,uDAAP,MACfkB,EAAenN,KAAKgM,SAASC,GAC7BmB,EAAkBT,EAAQQ,EAGhC,OAFAnN,KAAKqN,SAASD,EAAiBnB,GAExBjM,MAGTqN,SAnWgD,SAmWvCV,GAAqB,IAIxB3J,EACAe,EACAuJ,EANUrB,EAAc,uDAAP,MACf3L,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAC1BhE,EAAU,GAShB,IAJa,QAAT0G,IACFU,EAAQvN,EAAEwN,SAASW,iBAAiBZ,IAGjC3J,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAAS8F,GAC5CiE,EAAIlO,EAAEqK,MACF4B,KAAKmC,IAAIb,GAAS5I,EAAEE,EAAIoH,KAAKoC,IAAId,GAAS5I,EAAEG,EAC5CmH,KAAKoC,IAAId,GAAS5I,EAAEE,EAAIoH,KAAKmC,IAAIb,GAAS5I,EAAEG,GAEhDqB,EAAQvC,GAAK1C,EAAIqJ,UAAU2D,EAAE1D,IAAIP,IAKnC,OAFArJ,KAAKuL,WAAWhG,GAETvF,MAGT0N,OA7XgD,SA6XzCC,EAAaC,GAClB,IACI5K,EACAe,EAFEzD,EAAMN,KAAKO,KAGXsN,EAAe,GACfvK,EAAQhD,EAAIgJ,QAAQqE,GAAapK,SAASjD,EAAIgJ,QAAQsE,IAE5D,IAAK5K,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAASD,GAC5CuK,EAAa7K,GAAK1C,EAAIqJ,UAAU5F,GAGlC/D,KAAKuL,WAAWsC,IAGlBC,QA5YgD,WAwZ9C,IAXA,IAAMxN,EAAMN,KAAKO,KACX8I,EAASrJ,KAAK6J,mBAAmBR,OACjCG,EAASxJ,KAAK6J,mBAAmBL,OACjCuB,EAAO/K,KAAK6J,mBAAmBkB,KAC/BxF,EAAU,CACd8D,EAAO9F,SAASiG,GAChBH,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,IACrCmF,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,IACrCmF,EAAOO,IAAIJ,IAGJxG,EAAI,EAAGA,EAAI,EAAGA,IAChB1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,GAAMgD,OAAO/N,KAAKmD,UAAUH,KACzDhD,KAAKsK,UAAUtH,EAAG1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,IAOhD,OAHA/K,KAAK6K,QAAS,EACd7K,KAAK6I,KAAK,WAEH7I,MAKTgO,oBAtagD,SAsa5BvE,GAOlB,IAAMwE,EAAO7O,EAAEiI,QAAQ6G,SAEjBC,GAASF,EAAO,KAAO,IAAM,IAEnC,MAHa,aAAeA,EAAO,KAAO,IAAM,IAGlCxE,EAAMxF,EAAI,MAAQwF,EAAMvF,EAAI,KAAOiK,GAGnDjH,OApbgD,WAqb9C,IAAM5G,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACb6B,EAAqBhE,EAAEwD,KAAKtC,EAAI8C,mBAAoB9C,GACpD+N,EAAkBrO,KACnBsO,8BAA8BlL,GAC7BC,EAAUD,EAAmBpD,KAAKmD,UAAU,IAC5CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,KAK5DP,EAAMjC,MAAM/M,EAAE6C,QAAQmK,UAAY,WAAa,QAE/CpM,KAAKgH,SAASY,IAAM5H,KAAKgM,WACzBhM,KAAKgH,SAASc,IAAM9H,KAAKgM,SAAS,QASpCzE,aAldgD,SAkdnCqH,GACX,IAAMtO,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACbsN,EAAwB,SAASrE,GACrC,OAAOlK,EAAIwO,uBAAuBtE,EAAQoE,EAAM7D,KAAM6D,EAAMvF,SAExDgF,EAAkBrO,KAAKsO,8BACzBO,GAEExL,EAAUwL,EAAsB7O,KAAKmD,UAAU,IAC/CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,MAG9DrJ,WAregD,WAse9C,OAAOtF,KAAKmH,UAGdhE,UAzegD,SAyetCH,GACR,OAAOhD,KAAKmH,SAASnE,IAIvBuG,UA9egD,WA+e9C,IAAMjJ,EAAMN,KAAKO,KACXkE,EAASzE,KAAKsF,aAAab,QAAO,SAASsK,EAAKxE,GACpD,OAAOwE,EAAInF,IAAItJ,EAAIgJ,QAAQiB,MAC1BnL,EAAEqK,MAAM,EAAG,IACd,OAAOnJ,EAAIqJ,UAAUlF,EAAOiF,SAAS,KAGvC4E,8BAtfgD,SAsflBU,GAI5B,IAIIC,EAJEzF,EAASwF,EAAkBhP,KAAKmD,UAAU,IAC1C+L,EAAIlP,KAAKuB,aAAa4N,aAAe,IACrCC,EAAIpP,KAAKuB,aAAa8N,cAAgB,IACtCnM,EAAI,GAGV,IAAK+L,EAAI,EAAGA,EAAI,EAAGA,IACjB/L,EAAE0C,KAAKoJ,EAAkBhP,KAAKmD,UAAU8L,IAAIK,UAAU9F,IAcxD,OAAOpK,EAAEmQ,WAAWC,oBAChB,EAAG,EAAGtM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAG,EAAGhM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnB,EAAGkL,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAGE,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,MAK3B9E,EAAEqQ,wBAA0B,SAAS5J,EAAIrG,GACvC,OAAO,IAAIJ,EAAEoH,wBAAwBX,EAAIrG,IAG3CJ,EAAEsQ,IAAIC,aAAY,WACXvQ,EAAE6C,QAAQQ,SAASzC,KAAK4P,eAAgB,QAC3CxQ,EAAE6C,QAAQ4N,SAAS7P,KAAK4P,eAAgB,W,0BC9hB5CxQ,EAAE6C,QAAU7C,EAAE6C,SAAW,GACzB7C,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBqF,UAAY3Q,EAAE4Q,QAAQzQ,OAAO,CAE9CC,QAAS,CACPyQ,SAAU,YAGZnQ,WAN8C,SAMnCQ,EAAKd,GACdQ,KAAKO,KAAOD,EACZlB,EAAEW,WAAWC,KAAMR,IAGrB0Q,SAX8C,WAYvClQ,KAAKmQ,aACRnQ,KAAKoQ,WAAapQ,KAAKqQ,kBACvBrQ,KAAKsQ,eAAiBtQ,KAAKuQ,QAC3BvQ,KAAKwQ,SAAWxQ,KAAKyQ,gBACrBzQ,KAAK0Q,WAAW1Q,KAAKoQ,WAAYpQ,KAAKsQ,eAAgBtQ,KAAKwQ,UAE3DpR,EAAE8B,SAASR,GAAGV,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE7DZ,EAAE8B,SAAS0P,wBAAwB5Q,KAAKoQ,YACxChR,EAAE8B,SAAS2P,yBAAyB7Q,KAAKoQ,cAI7CU,YAzB8C,WA0BxC9Q,KAAKmQ,aACP/Q,EAAE8B,SAASH,IAAIf,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE9DZ,EAAE6C,QAAQ8O,OAAO/Q,KAAKwQ,UACtBpR,EAAE6C,QAAQ8O,OAAO/Q,KAAKsQ,gBACtBlR,EAAE6C,QAAQ8O,OAAO/Q,KAAKoQ,YACtBpQ,KAAKmQ,YAAa,IAItBE,gBApC8C,WAqC5C,IAAMW,EAAY5R,EAAE6C,QAAQgP,OAAO,MAAO,sBAC1CD,EAAUE,aAAa,KAAM,iBAE7B,IAAMC,EAAU/R,EAAE6C,QAAQgP,OAAO,KAAM,WAGvC,OAFAD,EAAUvJ,YAAY0J,GAEfH,GAGTP,cA9C8C,WA+C5C,IAAMW,EAAUhS,EAAE6C,QAAQgP,OAAO,IAAK,IAUtC,OATAG,EAAQC,UAAYjS,EAAEkS,SAASL,OAAO,iBAEtCG,EAAQF,aAAa,KAAM,oBAC3BE,EAAQF,aAAa,OAAQ,KAC7BE,EAAQF,aAAa,QAAS,eAE9BE,EAAQF,aAAa,OAAQ,UAC7BE,EAAQF,aAAa,aAAc,eAE5BE,GAGTb,MA5D8C,WA6D5C,IAAMgB,EAAOnS,EAAE6C,QAAQgP,OAAO,MAAO,IAIrC,OAHAM,EAAKL,aAAa,KAAM,qBACxBK,EAAKpF,MAAMqF,QAAU,OAEdD,GAGTb,WApE8C,SAoEnCM,EAAWO,EAAME,GAC1BzR,KAAKmQ,WAAa/Q,EAAEsS,QAAQ,CAACzB,SAAUjQ,KAAKR,QAAQyQ,WAEpDjQ,KAAKmQ,WAAW9P,MAAQ,WAuBtB,OAtBA2Q,EAAUvJ,YAAY8J,GACtBA,EAAKI,mBACD,YACA,k3CAkBJX,EAAUvJ,YAAYgK,GACfT,GAGThR,KAAKmQ,WAAWyB,MAAM5R,KAAKO,OAG7BoQ,iBApG8C,SAoG7B3P,GACfA,EAAEY,iBAEF5B,KAAKoQ,WAAWyB,UACgB,kCAA9B7R,KAAKoQ,WAAWyB,UACd,qCACA,gCAGJ7R,KAAKsQ,eAAenE,MAAMqF,QACc,SAAtCxR,KAAKsQ,eAAenE,MAAMqF,QAAqB,QAAU,OAG3DxR,KAAKwQ,SAASa,UACgB,UAA5BrR,KAAKwQ,SAASa,UACZjS,EAAEkS,SAASL,OAAO,iBAClB,QAGJ7R,EAAEkS,SAASQ,YAAY9R,KAAKwQ,SAAU,cAAe,eACrDpR,EAAE6C,QAAQC,YAAYlC,KAAKwQ,SAAU,eAGvCuB,eA3H8C,WA4H5C,IAAIC,SAASC,cAAc,sBAA3B,CAEA,IAAMC,EAAK9S,EAAE6C,QAAQgP,OAAO,MAAO,IACnCiB,EAAGrM,GAAK,oBACRqM,EAAGhB,aAAa,SAAU,UAE1BlR,KAAKmS,UAAW,IAAI/S,EAAEgT,kBAAmBC,SACzCH,EAAGb,UAAYrR,KAAKmS,SAEpBH,SAASC,cAAc,8BAA8BxK,YAAYyK,OAIrE9S,EAAEsL,iBAAiBqF,UAAUJ,aAAY,WACvCvQ,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACrClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACvClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GAAK,EAC5C,EAGgD,IAA9ClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,IAAalT,EAAEiI,QAAQkL,SAChE,EAAK9R,SACL,EAAKsR,qBAIT3S,EAAE0Q,iBAAiB0C,UAAY,SAAClS,EAAKd,GACnC,OAAO,IAAIJ,EAAEsL,iBAAiBqF,UAAUzP,EAAKd,K,eC3J/CJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEC,sBAAsBoT,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CAC9CC,QAAS,CACPkT,OAAQtT,EAAE0Q,iBAAiB6C,kBAG7B7S,WAL8C,SAKnC8S,EAAOpT,GAChBQ,KAAK6S,OAASD,EACd5S,KAAK8S,YAAcF,EAAMpT,QAAQE,WAEjCN,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB6C,iBAAiBI,OAAS,iBAG/C7C,SAd8C,WAe5C,IACM5P,EADQN,KAAK6S,OACDtS,KAElBP,KAAKgT,YAAchT,KAAKR,QAAQyT,QAChCjT,KAAKkT,YACD9T,EAAEwD,KAAKxD,EAAEe,MAAMgT,aAAanT,KAAM,cAAe,aACjDA,KAAKoT,YAAapT,MAEtBZ,EAAE8B,SAASR,GAAGsR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE9CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAGlDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQC,aAG/CqQ,YAxC8C,WAyC5C,IACMxQ,EADQN,KAAK6S,OACDtS,KAElBnB,EAAE8B,SAASH,IAAIiR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE/CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MAGnDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAKsT,gBACLtT,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQM,cAG/CL,OA9D8C,WAiE5C,OAFAT,KAAKyT,UAAW,EAChBzT,KAAKkQ,WACElQ,MAGTc,QApE8C,WAuE5C,OAFAd,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAGTqT,WA1E8C,SA0EnCrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KAExB3T,KAAK0T,IAEN1T,KAAK6S,OAAO1Q,gBACdnC,KAAK0T,GAAaxT,KAAKF,OAI3B0I,aArF8C,SAqFjC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKsT,cAActS,IAIrDsH,sBA1F8C,WA2F5C,IAAMhI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MACjDZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKsT,cAAetT,OAGxDwI,qBAhG8C,WAiG5C,IAAMlI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAChDZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKsT,cAAetT,OAGzDsT,cAtG8C,SAsGhCtS,GACZ,IAAI4S,EAEA5S,IAAK4S,EAAK5S,EAAE6S,eAKZD,IAAOA,EAAG9Q,UAAY8Q,EAAG7R,kBAAkB+R,oBAI/C9T,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB7B,EAAE6C,QAAQ8R,YAAY9S,EAAMM,aAAc,aAC1CN,EAAMmB,cAGRpC,KAAKsC,iBAEDtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCgT,aA5H8C,WA4H/B,WACRhU,KAAKiU,QAAQ7U,EAAE8U,eAEpBlU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd2T,UAELlT,EAAMmB,gBAKZgS,WAzI8C,WAyIjC,WACNpU,KAAKiU,QAAQ7U,EAAEiV,aAEpBrU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd8T,QAELlV,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CiS,gBAtJ8C,SAsJ9BxS,GAAG,WACXuT,EAAMvT,EAAEwT,iBACRlU,EAAMN,KAAK6S,OAAOtS,KAExBP,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB,IAAMa,EAAOb,EAAMT,QAEfS,EAAMiJ,cAAgBjJ,EAAMmB,WAEhC,IAAM2I,EAAOzK,EAAIwJ,UACXT,EAAS/I,EAAIiJ,YACfkL,EAAYrV,EAAE4K,aAAa/I,EAAMkC,UAAU,GAAIlC,EAAMkC,UAAU,IAEnEsR,EAAYnU,EAAIoU,8BAA8BD,EAAW1J,EAAM1B,GAC3DkL,EAAII,WAAWF,IAAc3S,EAAKE,YAC/B,EAAKyI,SAAW,EAAKpI,cAC1BjD,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CqT,aA3K8C,SA2KjC5T,GAAG,WACd,GAAKhB,KAAKiU,QAAQ7U,EAAEyV,cAApB,CAEA,IAAMC,EAAiB9U,KAAK6S,OAAOpP,YAC7BsR,EAAID,EAAejQ,OAEf,IAANkQ,IAEW3V,EAAE6C,QAAQ+S,eAAeD,KAGtCD,EAAe3Q,SAAQ,SAAClD,GACtB,EAAK4R,OAAOoC,YAAYhU,MAErBjB,KAAK6S,OAAO1Q,gBACfnC,KAAKsC,kBAILtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,MAGtCkU,aAjM8C,WAkMvClV,KAAKmV,mBACRnV,KAAK8S,YAAYsC,gBAAaC,GAGhCC,cAActV,KAAKuV,iBAGrBlT,YAzM8C,WA0M5C,IAAMuQ,EAAQ5S,KAAK6S,OACbvS,EAAMsS,EAAMrS,KAEdqS,EAAMpT,QAAQgW,iBAAmBxV,KAAKyK,UAE1CzK,KAAKyK,QAAUrL,EAAE0Q,iBAAiB2F,WAAW,CAC3CxC,QAASjT,KAAKgT,YACd/C,SAAU,YACT2B,MAAMtR,EAAKsS,KAGhBtQ,eArN8C,WAsN5C,IAAMhC,EAAMN,KAAK6S,OAAOtS,KACxB,IAAIP,KAAKyK,QAIP,OAAO,EAHPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,GAMnBwJ,QA/N8C,SA+NtCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDE,QAnO8C,SAmOtCF,GAMN,MALwB,yBAApBA,EAAMG,WAAyC7V,KAAKiU,QAAQyB,KAC9D1V,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,eAEArC,MAGT8V,WA5O8C,SA4OnCJ,GAAO,WAWhB,OAVA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,OAAI,EAAKhD,YAAYgD,KAASN,IAC5B,EAAKpT,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,eACE,MAKJrC,MAGToT,YA1P8C,WA0PhC,WACZ,GAAKpT,KAAKiU,QAAQ7U,EAAE8W,cAEpB,OAAO,IAAIC,SAAQ,SAACC,GAClB,IAGIxW,EAHEyW,EAAO,EAAKvD,YAClBuD,EAAKD,QAAUA,EAGf,EAAKb,eAAiB,KAmEtB,EAAKJ,mBAAqBkB,EAAKjB,WAC1B,EAAKD,mBACRkB,EAAKjB,WAAa,EAAKvC,OAAO/N,qBAAqBa,QAGrD0Q,EAAKC,UAAYD,EAAKC,WAAa,IACnCD,EAAKxK,MAAQwK,EAAKxK,OAAS,IAC3BwK,EAAKE,QAAUF,EAAKE,SAvEI,SAACC,IACvBA,EAAOC,KAAKC,MAAMF,IAETG,aACH/W,IAAc4W,EAAKG,YAAcH,EAAKG,WAAWC,MAAM,WAIzDhX,EAAY4W,EAAKG,YAIC,aAAhBH,EAAKK,SACPvB,cAAc,EAAKC,gBAEd,EAAKJ,mBACR,EAAKrC,YAAYsC,gBAAaC,GAGhCe,IACiB,OAAbI,EAAKM,KACPC,MAAM,qBAAuBV,EAAKxW,UAAY2W,EAAKM,MAMvDE,QAAQC,IAAIT,KA6ChBH,EAAKa,gBAAkBb,EAAKa,iBAvCI,SAACV,GAC/B5W,EAAYyW,EAAKzW,UAAY4W,EAE7B,EAAKjB,eAAiB4B,aAAY,WAChC,IACMC,EAAM,IAAIC,QAAJ,UAAezX,EAAf,YAA4B0X,KAAKC,OAD7B,CAACC,OAAQ,QAEzBC,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKrB,EAAKE,WACZF,EAAKC,YA6BVD,EAAKyB,eAAiBzB,EAAKyB,gBAzBI,SAACC,GAC9B,IAAMC,EAAO,IAAIC,SACjBD,EAAKE,OAAO,aAAczB,KAAK0B,UAAUJ,EAAW3C,aACpD4C,EAAKE,OAAO,QAASH,EAAWlM,OAChCmM,EAAKE,OAAO,UAAU,GAEtB,IAAME,EAAU,CAACZ,OAAQ,OAAQa,KAAML,GACjCZ,EAAM,IAAIC,QAAQU,EAAWpY,eAAgByY,GACnDX,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKK,EAAWb,kBAerBb,EAAKyB,eAAezB,SAK1BjX,EAAEmH,sBAAsBzE,KAAO,SAAC8Q,EAAOpT,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBoT,KAAKG,EAAOpT,K,eCzVjDJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEsL,iBAAiB+H,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CACzCC,QAAS,CACP8Y,QAAS,GACTC,QAAS,gBACT7F,OAAQtT,EAAE0Q,iBAAiB0I,YAG7B1Y,WAPyC,SAO9B0C,EAAShD,GAClBQ,KAAKyY,SAAWjW,EAChBxC,KAAK0Y,eAAgB,EACrB1Y,KAAK4D,MAAQpB,EAAQhD,QAAQmE,KAC7B3D,KAAK2Y,cAAe,EACpB3Y,KAAK4Y,WAAY,EACjB5Y,KAAK6Y,SAAW,EAEhBzZ,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB0I,WAAWzF,OAAS,aAIzC7C,SArByC,WAsBvC,IAAM1N,EAAUxC,KAAKyY,SAErBzY,KAAKgT,YAAchT,KAAKR,QAAQyT,QAGhCzQ,EAAQsW,eACR9Y,KAAK+Y,aACL/Y,KAAKgZ,eACLhZ,KAAKiZ,4BAEDzW,EAAQ0H,eAAiB1H,EAAQhD,QAAQgW,iBAC3CxV,KAAKqC,cAGPrC,KAAKkZ,cAAc1W,EAAQyF,IAAKzF,EAAQyF,GAExC7I,EAAE8B,SAASR,GAAG8B,EAAQjB,aAAc,CAClC4X,SAAUnZ,KAAKoZ,UACdpZ,MAEHZ,EAAE8B,SAASR,GAAG2Y,OAAQ,UAAWrZ,KAAKqT,WAAYrT,OAIpD8Q,YA9CyC,WA+CvC,IAAMtO,EAAUxC,KAAKyY,SACfxQ,EAAKjI,KAAKkZ,YAOhB,IAAK,IAAMI,KAJXtZ,KAAKuZ,mBAEDvZ,KAAKyK,SAAWzK,KAAKsC,iBAEJtC,KAAKwZ,SACxBpa,EAAE6C,QAAQ8O,OAAOuI,GAOfla,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAC3CnC,EAAE6C,QAAQ8R,YAAYvR,EAAQjB,aAAc,aAG1C0G,IAAQA,EAAG9F,gBAAkB8F,EAAGzH,QAAQiK,SAC1CxC,EAAGzH,QAAQ8B,iBAGblD,EAAE8B,SAASH,IAAIyB,EAAQjB,aAAc,CACnC4X,SAAUnZ,KAAKoZ,UACdpZ,MAEHZ,EAAE8B,SAASH,IAAIsY,OAAQ,UAAWrZ,KAAKqT,WAAYrT,OAGrDc,QA9EyC,WA+EvC,OAAKd,KAAKyT,UAEVzT,KAAKyY,SAASrW,WACdpC,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MALsBA,MAQ/B+Y,WAvFyC,WA2FvC,IAAK,IAAMpV,KAHX3D,KAAKyZ,OAAS,GAGKra,EAAEsL,iBAAiB+H,KAAKiH,MAAO,CAChD,IAAM/D,EAASvW,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,IACH,IAAtC3D,KAAKgT,YAAY2G,QAAQhE,KAC3B3V,KAAKyZ,OAAO9V,GAAQgS,GAMnB3V,KAAKyZ,OAAOzZ,KAAK4D,SACpB5D,KAAK4D,MAAQsE,OAAOC,KAAKnI,KAAKyZ,QAAQ,KAK1CT,aA1GyC,WA2GvC,IACIhW,EADER,EAAUxC,KAAKyY,SAIrB,IADAzY,KAAK4Z,aAAexa,EAAEya,aACjB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAK4Z,aAAaE,SAAS1a,EAAE2a,WAAWvX,EAASQ,IAInD,IADAhD,KAAKga,cAAgB5a,EAAEya,aAClB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKga,cAAcF,SAAS1a,EAAE6a,YAAYzX,EAASQ,IAIrD,IADAhD,KAAKka,gBAAkB9a,EAAEya,aACpB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKka,gBAAgBJ,SAAS1a,EAAE+a,cAAc3X,EAASQ,IAIzD,IADAhD,KAAKoa,eAAiBhb,EAAEya,aACnB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKoa,eAAeN,SAAS1a,EAAEib,aAAa7X,EAASQ,IAKvD,IADAhD,KAAKsa,mBAAqBlb,EAAEya,aACvB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKsa,mBAAmBR,SAAS1a,EAAEmb,iBAAiB/X,EAASQ,IAI/D,IADAhD,KAAKwa,aAAepb,EAAEya,aACjB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKwa,aAAaV,SAAS1a,EAAEqb,WAAWjY,EAASQ,EAAG,CAAC0X,WAAW,KAGlE1a,KAAKwZ,SAAW,CACdnY,KAAMrB,KAAK4Z,aACX/N,MAAO7L,KAAKga,cACZW,QAAS3a,KAAKka,gBACdU,OAAQ5a,KAAKoa,eACbS,WAAY7a,KAAKsa,mBACjBQ,KAAM9a,KAAKwa,eAIfvB,0BAvJyC,WAwJvC,IAAM8B,EAAK/a,KAAKyY,SAGXzY,KAAK4D,OAKV5D,KAAKgb,iBAEAD,EAAG7Q,cAAgBlK,KAAKib,eAC3Bjb,KAAKib,cAAcpZ,WAAU,SAACyX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASra,aAGtCd,KAAKob,OAAO,SAAWpb,KAAKqb,mBAZ/Brb,KAAKqb,mBAeThI,WA3KyC,SA2K9BrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KACvBoH,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,YAEZjR,GAAMA,EAAG9F,qBAEakT,IAAtBrV,KAAK0T,IAA+BqH,EAAGvb,QAAQgW,iBAC7CuF,EAAG7Q,cAAgBlK,KAAKyK,SAC1BzK,KAAK0T,GAAaxT,KAAKF,OAK7Bsb,YA1LyC,SA0L7BC,EAAKC,GAAM,WACrB,MAAuB,yBAAnBA,EAAK3F,WAAwC7V,KAAKiU,QAAQuH,IAG9Dxb,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASwF,EAAK,CAIhB,IAAK,IAAM5X,KAHX,EAAKrB,iBACL,EAAK0Q,YAAYgD,GAAOwF,EACxB,EAAKnZ,cACcjD,EAAEsL,iBAAiB+H,KAAKiH,MACrCta,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,KAAU4X,UACnC,EAAK9B,OAAO9V,GACnB,EAAK8X,YAAY9X,IACRvE,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,KAAU6X,IACjD,EAAK/B,OAAO9V,GAAQ6X,GAGxB,OAAO,MAfFxb,MAqBX4V,QAjNyC,SAiNjCF,GACN,GAAwB,yBAApBA,EAAMG,YAAyC7V,KAAKiU,QAAQyB,GAAQ,CAItE,IAAK,IAAM/R,KAHX3D,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,cACcjD,EAAEsL,iBAAiB+H,KAAKiH,MACrCta,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,KAAU+R,IAC1C1V,KAAKyZ,OAAO9V,GAAQ+R,GAGnB1V,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBAE1C,OAAOtC,MAGTiU,QAhOyC,SAgOjCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDI,WApOyC,SAoO9BJ,GAAO,WAgBhB,OAfA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASL,EAAO,CAIlB,IAAK,IAAM/R,KAHX,EAAKrB,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,cACcjD,EAAEsL,iBAAiB+H,KAAKiH,MACrCta,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,KAAU+R,WACnC,EAAK+D,OAAO9V,GACnB,EAAK8X,YAAY9X,IAGrB,OAAO,MAGN3D,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBACjCtC,MAITyb,YAxPyC,SAwP7B9X,GACN3D,KAAKob,OAAOzX,KACVuE,OAAOC,KAAKnI,KAAK0b,YAAY7W,QAAU,EACzC7E,KAAKoZ,YAEQ,SAATzV,GAAmB3D,KAAKqb,kBAC5Brb,KAAK4D,MAAQ,GACb5D,KAAKgb,mBAKX1Y,eApQyC,WAqQvC,IACMhC,EADKN,KAAKyY,SACDlY,KAEXP,KAAKyK,UACPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,IAInB4Q,gBA9QyC,WA8QvB,WACV7Y,EAAUxC,KAAKyY,SACfnY,EAAMkC,EAAQjC,KAEpBP,KAAKmb,SAAW,IAAI/b,EAAEuc,UAAUnZ,EAAQjB,cACxCvB,KAAKmb,SAAS1a,SAGdT,KAAKmb,SAASza,GAAG,aAAa,WAC5B8B,EAAQqG,KAAK,aACb,EAAKvG,oBAOPtC,KAAKmb,SAASS,gBAAkB,WAC9B,IAEIC,EAEA7Y,EAJEK,EAAUb,EAAQW,UAAU,GAC5BG,EAAQtD,KAAK8b,QAAQvY,SAASjD,EAAI8C,mBAAmBC,IAErDkC,EAAU,GAKhB,IAFAvF,KAAK6I,KAAK,WAEL7F,EAAI,EAAGA,EAAI,EAAGA,IACjB6Y,EAAevb,EAAI8C,mBAAmBZ,EAAQW,UAAUH,IACxDuC,EAAQvC,GAAK1C,EAAIqL,mBAAmBkQ,EAAajS,IAAItG,IAGvDd,EAAQ+I,WAAWhG,GACnB/C,EAAQqG,KAAK,QAEb7I,KAAK6I,KAAK,SAGZ7I,KAAKmb,SAASza,GAAG,WAAW,WAC1B8B,EAAQqG,KAAK,eAIjB0Q,iBAxTyC,WAyTnCvZ,KAAKmb,WACPnb,KAAKmb,SAASra,iBACPd,KAAKmb,WAIhBY,UA/TyC,WAgUvC/b,KAAKgc,QAAQ,SAGfC,WAnUyC,WAoUvCjc,KAAKgc,QAAQ,UAGfE,aAvUyC,WAwUvClc,KAAKgc,QAAQ,YAGfG,YA3UyC,WA4UvCnc,KAAKgc,QAAQ,WAGfI,gBA/UyC,WAgVvCpc,KAAKgc,QAAQ,eAGfK,gBAnVyC,WAoVnCrc,KAAKob,OAAO,QAAWpb,KAAKmU,UACzBnU,KAAKsU,SAGdgI,eAxVyC,WAyVvC,IACIhE,EADElK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEmd,iBAEpBvc,KAAK2Y,cAAgB3Y,KAAK2Y,aAC1BL,EAAUtY,KAAK2Y,aAAe3Y,KAAKR,QAAQ8Y,QAAU,EAErDlZ,EAAE6C,QAAQiZ,WAAW9M,EAAOkK,GAC5BlK,EAAM8C,aAAa,UAAWoH,GAE9BtY,KAAKwc,aAGPC,cAvWyC,SAuW3BC,GACZ,IAAMtO,EAAQpO,KAAKyY,SAASlX,aACxB+W,EAAUoE,EAET1c,KAAKiU,QAAQ7U,EAAEud,mBAEnB3c,KAAKsY,QAAU,EAAKtY,KAAK2Y,cAAe,EAAO3Y,KAAK2Y,cAAe,EAEpEvZ,EAAE6C,QAAQiZ,WAAW9M,EAAOkK,GAC5BlK,EAAM8C,aAAa,UAAWoH,GAE9BtY,KAAKwc,aAGPI,cArXyC,WAsXvC,IACIrE,EADEnK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEyd,gBAEpB7c,KAAK4Y,WAAa5Y,KAAK4Y,UACvBL,EAAUvY,KAAK4Y,UAAY5Y,KAAKR,QAAQ+Y,QAAU,OAElDnK,EAAMjC,MAAMoM,QAAUA,EAEtBvY,KAAKwc,aAIPM,aApYyC,WAqYnC9c,KAAK0Y,cAAiB1Y,KAAK+c,WACxB/c,KAAKgd,cAGdC,eAzYyC,WA0YvC,IAAMlC,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,aAEZlZ,KAAKob,OAAO,SAAYpb,KAAKiU,QAAQ7U,EAAEyV,eAE5BzV,EAAE6C,QAAQib,kBAGzBld,KAAKsC,iBAED2F,EAAMA,EAAGgN,YAAY8F,GAClBA,EAAGxa,KAAK0U,YAAY8F,KAI7BoC,WAzZyC,WA0ZvC,IAAM3a,EAAUxC,KAAKyY,SACfnY,EAAMkC,EAAQjC,KACdoE,EAAMnC,EAAQjB,aAEpB,GAAKvB,KAAKiU,QAAQ7U,EAAE8W,cAApB,CAGA,IAAMkH,EAAe,IAAIC,MAEzBD,EAAavX,GAAKuX,EAAavX,IAAM,cACrCmM,SAASqG,KAAK5Q,YAAY2V,GAE1BA,EAAaE,OAAS,WACpB,IAAMtX,EAASoX,EAAapX,OACtBD,EAAQqX,EAAarX,MACrBwX,EAAKjd,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cqa,EAAKld,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Csa,EAAKnd,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cua,EAAKpd,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAsBpDia,EAAaE,OAAS,WACpBle,EAAE6C,QAAQ8O,OAAOqM,IAGf/D,QAAUA,OAAOsE,eAAe,cAClCC,UACIR,EAAavX,GACb,CAAC,EAAG,EAAGE,EAAO,EAAGA,EAAOC,EAAQ,EAAGA,GACnC,CAACuX,EAAGtZ,EAAGsZ,EAAGrZ,EAAGsZ,EAAGvZ,EAAGuZ,EAAGtZ,EAAGwZ,EAAGzZ,EAAGyZ,EAAGxZ,EAAGuZ,EAAGxZ,EAAGwZ,EAAGvZ,IAC9C,IAKRkZ,EAAalY,IAAM1C,EAAQhD,QAAQqe,mBAAqBlZ,EAAIO,MAG9D6X,SAndyC,WAod7B/c,KAAK0Y,eAEJ1Y,KAAKiU,QAAQ7U,EAAE0e,eAE1B9d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASK,eACd9Y,KAAKwc,aAGPQ,WA7dyC,YA8d7Bhd,KAAK0Y,eAEL1Y,KAAKiU,QAAQ7U,EAAE0e,eAEzB9d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASsF,cACd/d,KAAKwc,aAGPrI,QAveyC,WAwevC,IAAM4G,EAAK/a,KAAKyY,SACVnY,EAAMya,EAAGxa,KACT0H,EAAKjI,KAAKkZ,YAEXlZ,KAAKob,OAAO,YACZnT,GAAOA,EAAG1F,YAAYwY,KAAS9S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKib,eAAiB3a,EAAI2U,YAAYjV,KAAKib,eACvB,SAApBF,EAAGvb,QAAQmE,MAAoB3D,KAAKge,QAAQjD,EAAGvb,QAAQmE,MAIzD3D,KAAK4D,MAAQmX,EAAGvb,QAAQmE,MAHxB3D,KAAK4D,MAAQ,GACb5D,KAAKib,cAAgB,IAIvBjb,KAAKgb,gBACLhb,KAAKqb,kBACLrb,KAAKwc,aAGPlI,MA7fyC,WA8fvC,IAAMyG,EAAK/a,KAAKyY,SACVnY,EAAMya,EAAGxa,KACT0H,EAAKjI,KAAKkZ,YAEZlZ,KAAKob,OAAO,YACXnT,GAAOA,EAAG1F,YAAYwY,KAAS9S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKib,eAAiB3a,EAAI2U,YAAYjV,KAAKib,eAC/Cjb,KAAK4D,MAAQ,OACb5D,KAAKgb,gBACLhb,KAAKuZ,mBACLvZ,KAAKwc,aAGPyB,UA9gByC,WA+gBvCje,KAAKyY,SAASrW,YAGhBiI,aAlhByC,SAkhB5BrJ,GACX,IAAMiH,EAAKjI,KAAKkZ,YAEXlZ,KAAKib,iBAELjb,KAAKob,OAAO,SAAYnT,GAAMA,EAAG9F,gBAEtCnC,KAAKib,cAAcpZ,WAAU,SAACyX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAAS1a,SACvCrB,EAAE6C,QAAQ4N,SAASyJ,EAAO/X,aAAc,4BAI5C4I,aAhiByC,WAiiBvC,IAAM4Q,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,YAGXlZ,KAAKwZ,UAAYxZ,KAAKgZ,eAEtBhZ,KAAKib,gBACNjb,KAAKob,OAAO,SAAYnT,GAAMA,EAAG1F,YAAYwY,IAEjD/a,KAAKib,cAAcpZ,WAAU,SAACyX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASra,UACvC1B,EAAE6C,QAAQ8R,YAAYuF,EAAO/X,aAAc,4BAI/CyZ,cAjjByC,WAkjBvC,IACM1a,EADKN,KAAKyY,SACDlY,KACToD,EAAO3D,KAAKke,UAEdle,KAAKib,eAAiB3a,EAAI2U,YAAYjV,KAAKib,eAC/Cjb,KAAKib,cAAyB,KAATtX,EAAc,GAAK3D,KAAKwZ,SAAS7V,GAC3B,KAAvB3D,KAAKib,eACP3a,EAAIwZ,SAAS9Z,KAAKib,gBAItB5Y,YA7jByC,WA8jBvC,IAAM0Y,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,YACV5Y,EAAMya,EAAGxa,KAETgF,EAAUwV,EAAGzV,aACf6Y,GAAS,IAEb,GAAIlW,GAAMA,EAAG9F,eACX8F,EAAGzH,QAAQ6B,mBAIb,IAAI0Y,EAAGvb,QAAQgW,kBAAmBxV,KAAKyK,QAAvC,CAEA,IAAK,IAAIzH,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAM2Y,IACnBA,EAAS5Y,EAAQvC,GAAGwC,KAKxB,IAAM4Y,EAAcrD,EAAGxR,YACvB6U,EAAY5Y,IAAM2Y,EAElBne,KAAKyK,QAAUrL,EAAE0Q,iBAAiBuO,SAASD,EAAa,CACtDnL,QAASjT,KAAKgT,cACbpB,MAAMtR,EAAKya,GACdA,EAAGlS,KAAK,qBAGV2T,SA5lByC,WA6lBnCxc,KAAKyK,SAAWzK,KAAKsC,iBACzBtC,KAAKqC,eAGPuI,kBAjmByC,WAkmBvC,IAAMpI,EAAUxC,KAAKyY,SAEflT,EAAU/C,EAAQ8C,aAClBmF,EAAUzK,KAAKyK,QACjB0T,GAAS,IAEb,GAAI1T,GAAWA,aAAmBrL,EAAEsL,iBAAiBC,SAAU,CAC7D,IAAK,IAAI3H,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAM2Y,IACnBA,EAAS5Y,EAAQvC,GAAGwC,KAKxB,IAAM4Y,EAAc5b,EAAQ+G,YAC5B6U,EAAY5Y,IAAM2Y,EAEb3b,EAAQhD,QAAQgW,iBACnBxV,KAAKyK,QAAQ6T,UAAUF,KAK7BJ,QAznByC,SAynBjCra,GACN,QAAS3D,KAAKyZ,OAAO9V,IAGvBua,QA7nByC,WA8nBvC,GAAKle,KAAKgC,UACV,OAAOhC,KAAK4D,OAGd8X,SAloByC,WAmoBvC,OAAO1b,KAAKyZ,QAGd2B,OAtoByC,SAsoBlCzX,GACL,QAAK3D,KAAKgC,WACHhC,KAAK4D,QAAUD,GAGxBqY,QA3oByC,SA2oBjCuC,GACN,IAAMxD,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,YAGhB,GAFalZ,KAAKke,YAELK,GAAYve,KAAKge,QAAQO,IAAave,KAAKgC,UAaxD,OATIhC,KAAKyK,SAAWzK,KAAKyK,QAAQ+T,UAAUD,GACvCve,KAAKob,OAAO,UAAYpb,KAAKmb,UAAYnb,KAAKqb,kBAClDrb,KAAK4D,MAAQ2a,EACTve,KAAKob,OAAO,SAAWpb,KAAKuZ,mBAChCvZ,KAAKgb,gBACLhb,KAAKwc,WAEDvU,GAAMA,EAAG1F,YAAYwY,IAAOA,EAAG3Y,WAE5BpC,MAOToZ,SApqByC,SAoqBhCpY,GACP,IAAM2C,EAAO3D,KAAKke,UACZjW,EAAKjI,KAAKkZ,YACVuF,EAAavW,OAAOC,KAAKnI,KAAK0b,YAC9B1F,EAAMyI,EAAW9E,QAAQhW,GAEzB4a,EAAUE,GADCzI,EAAM,GAAKyI,EAAW5Z,QAGvC,GAAI7D,EAAG,CACL,GAAIiH,GAAMA,EAAG9F,eAAkB,OAC/B/C,EAAE8B,SAASwd,KAAK1d,GAGlB,OAAOhB,KAAKgc,QAAQuC,MAIxBnf,EAAE0Q,iBAAiBhO,KAAO,SAACU,EAAShD,GAClC,OAAO,IAAIJ,EAAEsL,iBAAiB+H,KAAKjQ,EAAShD,K,eCzrB9CJ,EAAEyd,aAAezd,EAAEuf,WAAWpf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIof,EACAC,EAHE/c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK8W,WACPgG,EAAM,eACNC,EAAUrc,EAAQhD,QAAQiP,YAAYqQ,eAEtCF,EAAM,eACNC,EAAUrc,EAAQhD,QAAQiP,YAAYsQ,YAGxCvf,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACThN,UAAoB,SAATlO,EAAkB,WAAa,IAI5CvE,EAAEsL,iBAAiB8N,WAAW2G,EAAa,SAATxb,EAAkB,GAAK,gBAEzDvE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BmC,WA8BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,eAAgB,gBACnDjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,gBAAiB,cACpDvd,EAAK8a,oB,eClCTxd,EAAEyV,aAAezV,EAAEuf,WAAWpf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIqf,EAFE/c,EAAOU,EAAQhC,QAOjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCoM,EAAUrc,EAAQhD,QAAQiP,YAAY6Q,YAEtClgB,EAAEsL,iBAAiB8N,WAAW+G,UACb,SAAfzd,EAAK8B,MAAmB,GAAK,mBAG/Bib,EAAUrc,EAAQhD,QAAQiP,YAAY+Q,aACtCpgB,EAAEsL,iBAAiBiI,iBAAiB4M,UACnB,SAAfzd,EAAK8B,MAAmB,GAAK,iBAIjCpE,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAtBU,iBAuBVL,QAASA,EACThN,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAjCmC,WAkCjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAKmb,iBAC7Cnb,EAAK8S,mB,eCrChBxV,EAAEqgB,cAAgBrgB,EAAEuf,WAAWpf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASrc,EAAQhD,QAAQiP,YAAYiR,aACrC7N,UAAW,WAGbzS,EAAEsL,iBAAiB8N,WAAWmH,EAAI,eAClCvgB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdoC,WAerBlQ,KAAKyY,SAASjY,QACtB0b,mB,eChBT9c,EAAEwgB,WAAaxgB,EAAEuf,WAAWpf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,OACNL,QAASrc,EAAQhD,QAAQiP,YAAYoR,UACrChO,UAAW,QAGbzS,EAAEsL,iBAAiB8N,WAAWsH,EAAI,YAClC1gB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdiC,WAelBlQ,KAAKyY,SAASjY,QACtBub,gB,eChBT3c,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEuf,WAAavf,EAAE2gB,SAASC,OAAOzgB,OAAO,CACtCC,QAAS,CACPwf,YAAa,CACXC,KAAK,EACLC,KAAM,GACNrN,UAAW,GACXgN,QAAS,KAIb/e,WAVsC,SAU3BQ,EAAKkC,EAAShD,GACvBQ,KAAKyY,SAAWjW,EAChBxC,KAAKO,KAAOD,EAEZlB,EAAEW,WAAWC,KAAMR,GACnBJ,EAAE2gB,SAASC,OAAO/f,UAAUH,WAAWI,KAAKF,KAAMR,GAElDQ,KAAK+R,kBAGPtR,OApBsC,SAoB/BO,GACDA,GAAK5B,EAAE8B,SAASU,eAAeZ,GAC/BA,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,GAChChB,KAAKyT,WACTzT,KAAKyT,UAAW,EACZzT,KAAKkQ,UAAYlQ,KAAKkQ,aAG5B+P,YA5BsC,SA4B1BxV,EAASuG,EAAWkP,GAAM,WAC9BC,EAAcngB,KAAKR,QAAQwf,YAC3BnN,EAAYsO,EAAYtO,UACxB/P,EAAO9B,KAAKyY,SAASjY,QACrB2L,EAAQnM,KAAKR,QAAQwf,YAAY7S,MAEvCnM,KAAKyK,QAAUA,EACfzK,KAAKogB,MAAQhhB,EAAE6C,QAAQgP,OAAO,KAAM,GAAID,GACxChR,KAAKqf,MAAQjgB,EAAE6C,QAAQgP,OAAO,IAAK,GAAIjR,KAAKogB,OAExCD,EAAYlB,IACdjf,KAAKqf,MAAMhO,UAAYjS,EAAEkS,SAASL,OAAOkP,EAAYjB,MAErDlf,KAAKqf,MAAMhO,UAAY8O,EAAYjB,KAGrClf,KAAKqf,MAAMnO,aAAa,OAAQ,KAChClR,KAAKqf,MAAMnO,aAAa,QAASiP,EAAYtB,SACzC1S,GAASnM,KAAKqf,MAAMnO,aAAa,QAAS/E,GAC9CnM,KAAKqf,MAAMnO,aAAa,OAAQ,UAEhC9R,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAOrf,KAAKqgB,YAAYxK,WAE5ChE,IACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAOxN,GACb,aAAdA,GACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKogB,MAAOvO,GAE7BA,IAAc/P,EAAK8B,MACrBxE,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAO,iBAE/BjgB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAO,kBAItCjgB,EAAE8B,SAASR,GAAGV,KAAKqf,MAAO,QAASrf,KAAKS,OAAQT,MAChDZ,EAAE8B,SAASR,GAAGV,KAAKyY,SAAU,UAAU,WACrC,IAAM7B,EAAQ,EAAKyI,MAAMhO,UAAUuF,MAAM,yBACrCA,GAA0B,IAAjBA,EAAM/R,QAAgB,EAAKyb,mBAI1CtgB,KAAKugB,eAAe9V,EAASzK,KAAKogB,MAAOF,IAG3CnO,eAzEsC,WA0EpC,IAAIC,SAASC,cAAc,YAA3B,CAIA,IAAMC,EAAKF,SAASwO,cAAc,OAClCtO,EAAGrM,GAAK,UACRqM,EAAGhB,aAAa,SAAU,UAC1BgB,EAAGb,WAAY,IAAIjS,EAAEqhB,gBAAiBpO,SAEtCL,SAASC,cAAc,wBAAwBxK,YAAYyK,KAG7DoO,cAtFsC,WAuFpClhB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAMqB,cAAe,YAChDthB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAO,aAGpCsB,eA3FsC,WA4FpCvhB,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAMqB,cAAe,YAC7CthB,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAO,eAInCjgB,EAAEwhB,WAAa,SAAStgB,EAAKkC,EAAShD,GACpC,OAAO,IAAIJ,EAAEuf,WAAWre,EAAKkC,EAAShD,K,eCvGxCJ,EAAE8W,aAAe9W,EAAEuf,WAAWpf,OAAO,CAEnCO,WAFmC,SAExBQ,EAAKkC,EAAShD,GACvB,IACIqf,EADE/c,EAAOU,EAAQhC,QAGrBR,KAAK6gB,aAAc,EACnB7gB,KAAK8gB,gBAAiB,EACtB9gB,KAAK+gB,iBAAkB,EAEnBjf,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAWxX,EAAI,aAClC6d,EAAUrc,EAAQhD,QAAQiP,YAAYuS,cAEtC5hB,EAAEsL,iBAAiBiI,iBAAiB3R,EAAI,cACxC6d,EAAUrc,EAAQhD,QAAQiP,YAAYwS,eAGxCzhB,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASA,GAGXzf,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BmC,WA6BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3B,GAAIsB,aAAgB1C,EAAEsL,iBAAiB+H,KACrC3Q,EAAKqb,kBAKP,IAAInd,KAAK+gB,gBAAT,CAGE/gB,KAAK+gB,iBAAkB,EAGzB,IAAMG,EAAalhB,KAAKqf,MAAMqB,cAE9B1gB,KAAKmhB,kBAAoBnhB,KAAKohB,iBAAiBxe,KAAK5C,MACpDA,KAAKqhB,kBAAoBrhB,KAAKshB,iBAAiB1e,KAAK5C,MAEpDZ,EAAE8B,SAASR,GAAGwgB,EAAY,SAAS,WACjC,GAAKlhB,KAAK6gB,YAWH,CAEL,GAAI7gB,KAAK8gB,eACP,OAGF9gB,KAAKuhB,aACLvhB,KAAKwhB,0BAA0BN,GAC/Bpf,EAAKoT,oBAlBLlV,KAAK6gB,aAAc,EACnB7gB,KAAKyhB,mBAELC,WAAW1hB,KAAK2hB,0BAA0B/e,KAAK5C,KAAMkhB,GAAa,KAClEpf,EAAKoR,cAAcwE,KACf,WACE1X,KAAKuhB,aACLvhB,KAAKwhB,0BAA0BN,IAC/Bte,KAAK5C,SAYZA,QAGLuhB,WAzEmC,WA0EjCvhB,KAAK4hB,qBACL5hB,KAAK6gB,aAAc,EACnB7gB,KAAK8gB,gBAAiB,GAGxBa,0BA/EmC,SA+ETE,GACxBA,EAAQC,iBAAiB,aAAc9hB,KAAKmhB,mBAC5CU,EAAQC,iBAAiB,aAAc9hB,KAAKqhB,oBAG9CG,0BApFmC,SAoFTK,GACxBA,EAAQE,oBAAoB,aAAc/hB,KAAKmhB,mBAC/CU,EAAQE,oBAAoB,aAAc/hB,KAAKqhB,oBAGjDD,iBAzFmC,WA0FjCphB,KAAKgiB,oBAGPV,iBA7FmC,WA8F5BthB,KAAK8gB,eAGR9gB,KAAK8gB,gBAAiB,EAFtB9gB,KAAKyhB,oBAMTG,mBArGmC,WAsGjCxiB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,UAAW,WAC9CjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,gBAAiB,cACpDjgB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAM4C,WAAY,WAG/CR,iBA3GmC,WA4GjCriB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,WACnCjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,gBAAiB,cACpDjgB,EAAEkS,SAAS4Q,cAAcliB,KAAKqf,MAAO,WAGvC2C,iBAjHmC,WAkHjC5iB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,UACnCjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,gBAAiB,cACpDjgB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAM4C,WAAY,c,cCpHjD7iB,EAAE+iB,iBAAmB/iB,EAAEuf,WAAWpf,OAAO,CACvCO,WADuC,SAC5BQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,cACNL,QAASrc,EAAQhD,QAAQiP,YAAY2T,gBACrCvQ,UAAW,cAGbzS,EAAEsL,iBAAiB8N,WAAW6J,EAAI,kBAClCjjB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAduC,WAexBlQ,KAAKyY,SAASjY,QACtB4b,sB,eChBThd,EAAEkjB,gBAAkBljB,EAAEuf,WAAWpf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IAAMsC,EAAOU,EAAQhC,SAErBhB,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASrc,EAAQhD,QAAQiP,YAAY8T,eACrC1Q,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAfsC,WAgBpC,IAAM9B,EAAQpO,KAAKyY,SAASlX,aAE5BihB,KAAKC,QAAQrU,EAAOhP,EAAEojB,KAAKpU,Q,eClB/BhP,EAAEiV,WAAajV,EAAEuf,WAAWpf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,GACvB,IACIof,EACAC,EAFE/c,EAAOU,EAAQhC,QAIjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAWkK,EAAI,UAClCtjB,EAAEsL,iBAAiB8N,WAAWmK,EAAI,QAClC9D,EAAUrc,EAAQhD,QAAQiP,YAAYmU,SAEtChE,EAAM9c,EAAKsZ,OAAO,QAAU,OAAS,WAErChc,EAAEsL,iBAAiBiI,iBAAiBgQ,EAAI,aACxC9D,EAAUrc,EAAQhD,QAAQiP,YAAYoU,WACtCjE,EAAM,SAGRpf,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACThN,UAAW,QAGbzS,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BiC,WA8B/B,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAKua,kBAC7Cva,EAAKsS,iB,eCjChB,IAAI0O,EAAY,CAAC,IAAK,GAAI,GAAI,GAAI,GAAI,GAEtCA,EAAYA,EAAUxiB,KAAI,SAACoc,GAIzB,OAHCqG,MAAMrG,IAAMA,EAAI,OAAOA,EAAI,KAC3BA,EAAI,IAAKA,EAAI,GAEPtd,EAAEuf,WAAWpf,OAAO,CACzBC,QAAS,CACPwf,YAAa,CACXE,KAAMxC,EACNmC,QAAS,WAAanC,EAAG,IACzB7K,UAAW,gCACX1F,MAAO,yBAA2B,IAAMuQ,GAAK,MAAQ,IAAMA,GAAK,MAAQ,IAAMA,GAAK,QAGvFxM,SATyB,WAUvBlQ,KAAKyY,SAASjY,QAAQic,cAAcC,EAAE,WAK5C1F,QAAQC,IAAI6L,GAEZ1jB,EAAEud,gBAAkBvd,EAAEuf,WAAWpf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IACMmE,EADOnB,EAAQhC,QACHoD,OAElBpE,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,YACNL,QAAS,qBACThN,UAAoB,SAATlO,EAAkB,WAAa,IAG5CnE,EAAQwjB,WAAa,IAAI5jB,EAAE2gB,SAAS,CAClC9M,QAAS6P,IAGX1jB,EAAEsL,iBAAiB8N,WAAWkE,EAAa,SAAT/Y,EAAkB,GAAK,mBAEzDvE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAtBsC,WAsB3B,WACH+S,EAAOjjB,KAAKqf,MACdjgB,EAAE6C,QAAQQ,SAASwgB,EAAM,uBAC3B7jB,EAAE6C,QAAQ8R,YAAYkP,EAAM,sBAC5BvB,YAAW,WACT,EAAKliB,QAAQwjB,WAAWE,UACvB,MAEH9jB,EAAE6C,QAAQ4N,SAASoT,EAAM,sBAG3B7jB,EAAEkS,SAAS8N,YAAY6D,EAAM,YAAa,UAC1C7jB,EAAEkS,SAASQ,YAAYmR,EAAM,yBAA0B,c,eCzD3D7jB,EAAEmd,cAAgBnd,EAAEuf,WAAWpf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAEIof,EACAC,EAHE/c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK6W,cACPiG,EAAM,gBACNC,EAAUrc,EAAQhD,QAAQiP,YAAY0U,kBAEtCvE,EAAM,UACNC,EAAUrc,EAAQhD,QAAQiP,YAAY2U,uBAGxC5jB,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACThN,UAAoB,SAATlO,EAAkB,WAAa,IAG5CvE,EAAEsL,iBAAiB8N,WAAWkE,EAAa,SAAT/Y,EAAkB,GAAK,iBAEzDvE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BoC,WA6BlC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QACrByiB,EAAOjjB,KAAKqf,MAElBjgB,EAAEkS,SAAS8N,YAAY6D,EAAM,UAAW,iBACxC7jB,EAAEkS,SAASQ,YAAYmR,EAAM,yBAA0B,qBACvDnhB,EAAKwa,qB,eClCTld,EAAEikB,cAAgBjkB,EAAEuf,WAAWpf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAAMmE,EAAOvE,EAAEe,MAAMgT,aAAa3Q,EAAS,UAAW,SAChDqI,EAASrI,EAAQqI,QAEvBrL,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASrc,EAAQhD,QAAQiP,YAAY6U,aACrCzR,UAAWhH,GAAmB,SAATlH,EAAkB,GAAK,YAG9CvE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAhBoC,WAiBlC,IAAM6K,EAAK/a,KAAKyY,SAEhBrZ,EAAE8B,SAASR,GAAGqa,EAAI,CAChBjZ,KAAM9B,KAAKsgB,cACXxS,QAAS9N,KAAK2gB,gBACb3gB,MAEH+a,EAAGjN,c,eCxBP1O,EAAEmkB,aAAenkB,EAAEuf,WAAWpf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASrc,EAAQhD,QAAQiP,YAAY+U,YACrC3R,UAAW,UAGbzS,EAAEsL,iBAAiB8N,WAAWiL,EAAI,cAClCrkB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdmC,WAepBlQ,KAAKyY,SAASjY,QACtB2b,kB,eChBT/c,EAAEskB,YAActkB,EAAEuf,WAAWpf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,QACNL,QAASrc,EAAQhD,QAAQiP,YAAYkV,WACrC9R,UAAW,SAGbzS,EAAEsL,iBAAiB8N,WAAWoL,EAAI,aAClCxkB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdkC,WAenBlQ,KAAKyY,SAASjY,QACtByb,iB,eChBT7c,EAAE0e,YAAc1e,EAAEuf,WAAWpf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,GACvB,IACIof,EACAC,EAFE/c,EAAOU,EAAQhC,QAIjBsB,EAAK4W,eACPkG,EAAM,eACNC,EAAUrc,EAAQhD,QAAQiP,YAAYoV,eAEtCjF,EAAM,gBACNC,EAAUrc,EAAQhD,QAAQiP,YAAYqV,cAGxCtkB,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACThN,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEsL,iBAAiB8N,WAAWlL,EAAmB,SAAfxL,EAAK8B,MAAmB,GAAK,WAC/DxE,EAAEsL,iBAAiB8N,WAAWuL,EAAmB,SAAfjiB,EAAK8B,MAAmB,GAAK,aAE/DxE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BkC,WA6BhC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,gBAAiB,gBACpDjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,iBAAkB,iBACrDvd,EAAKgb,mB,eCjCT1d,EAAE8U,aAAe9U,EAAEuf,WAAWpf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASrc,EAAQhD,QAAQiP,YAAYuV,cAGvC5kB,EAAEsL,iBAAiBiI,iBAAiB+P,EAAI,eACxCtjB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAbmC,WActBlQ,KAAKyY,SAASjY,QACpBwT,mB,eCdT5U,EAAEojB,KAAO,SAAqB7d,GAC5B,GAAiD,IAA7CuD,OAAOC,KAAKqa,KAAKyB,WAAWtf,IAAME,OAAc,CAClDmS,QAAQC,IAAIuL,KAAKyB,WAAWtf,IAC5B,IAAMuf,EAAM1B,KAAKyB,WAAWtf,QAKC,IAApBuf,EAAIC,kBACiB,IAArBD,EAAIE,eAKTF,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAEhBD,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GAEfF,EAAIG,eAGJH,EAAII,iBAUqB,MAA3BJ,EAAIK,oBAK8B,MAA3BL,EAAIK,oBAHVlZ,KAAKyB,GACLoX,EAAIM,gBAAgBC,UAAYP,EAAIM,gBAAgBE,aAOvD1N,QAAQC,IAAI,yBAGdD,QAAQC,IAAI,eAAgBiN,EAAIS,cAGR,IAApBT,EAAIS,aAGuB,IAApBT,EAAIS,aAGgB,IAApBT,EAAIS,cAJHtZ,KAAKyB,QAWY,IAApBoX,EAAIU,kBACmB,IAAvBV,EAAIW,qBAKkB,IAApBX,EAAIU,kBACmB,IAAvBV,EAAIW,iBAGTX,EAAIU,YAAYH,UAAYP,EAAIU,YAAYF,YAC5CR,EAAIW,qBAMV9N,MAAM,4D,cClFV3X,EAAE0lB,cAAgB1lB,EAAE2lB,WAAWxlB,OAAO,CACpCC,QAAS,CACPwlB,KAAM,UACNC,KAAM7lB,EAAE6lB,KAAK,CACXC,QAEE,iVACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZoC,WAalBrlB,KAAKslB,SAEbhb,UAAUtK,KAAKulB,QAASvlB,KAAKwlB,cAGvCC,aAlBoC,WAmBlCzlB,KAAKse,UAAUte,KAAKslB,SAASniB,UAAUnD,KAAKulB,aAIhDnmB,EAAE+a,cAAgB,SAAS3X,EAASwT,EAAKxW,GACvC,OAAO,IAAIJ,EAAE0lB,cAActiB,EAASwT,EAAKxW,K,eCxB3CJ,EAAEsmB,WAAatmB,EAAE2lB,WAAWxlB,OAAO,CACjCC,QAAS,CACPwlB,KAAM,OACNC,KAAM7lB,EAAE6lB,KAAK,CAEXC,QAAS,ykCACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAXiC,WAY/B,IAAM7iB,EAAUxC,KAAKslB,SACfK,EAAenjB,EAAQW,UAAUnD,KAAKulB,SACtCK,EAAY5lB,KAAKwlB,YAEvBhjB,EAAQkL,OAAOiY,EAAcC,IAG/BH,aAnBiC,WAoB/BzlB,KAAKse,UAAUte,KAAKslB,SAASniB,UAAUnD,KAAKulB,aAIhDnmB,EAAE2a,WAAa,SAASvX,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAEsmB,WAAWljB,EAASwT,EAAKxW,K,eCzBxCJ,EAAE2lB,WAAa3lB,EAAEymB,OAAOtmB,OAAO,CAC7BO,WAD6B,SAClB0C,EAAS+H,EAAQ/K,GAC1B,IAAMgL,EAAShI,EAAQW,UAAUoH,GAEjCnL,EAAEW,WAAWC,KAAMR,GAEnBQ,KAAKslB,SAAW9iB,EAChBxC,KAAKulB,QAAUhb,EAEf,IAAMub,EAAgB,CACpBpL,WAAW,EACXqL,aAAc,IAGZvmB,GAAWA,EAAQme,eAAe,eACpCmI,EAAcpL,UAAYlb,EAAQkb,WAGpCtb,EAAEymB,OAAO5lB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQsb,IAGnDzlB,MArB6B,SAqBvBC,GACJlB,EAAEymB,OAAO5lB,UAAUI,MAAMH,KAAKF,KAAMM,GACpCN,KAAKgmB,iBACLhmB,KAAKylB,gBAGP5kB,SA3B6B,SA2BpBP,GACPN,KAAKimB,mBACL7mB,EAAEymB,OAAO5lB,UAAUY,SAASX,KAAKF,KAAMM,IAGzC4lB,mBAhC6B,WAiC3BlmB,KAAKslB,SAASzc,KAAK,cAGrBsd,iBApC6B,WAqC3BnmB,KAAKomB,aAGPA,UAxC6B,WAyC3BpmB,KAAKslB,SAASza,QAAS,EACvB7K,KAAKslB,SAASzc,KAAK,SAGrBmd,eA7C6B,WA8C3BhmB,KAAKU,GAAG,CACNgB,YAAatC,EAAE8B,SAASwd,KACxBvd,UAAWnB,KAAKkmB,mBAChB7kB,KAAMrB,KAAKqlB,cACXgB,QAASrmB,KAAKmmB,kBACbnmB,MAEHA,KAAKslB,SAAS/kB,KAAKG,GAAG,UAAWV,KAAKylB,aAAczlB,MACpDA,KAAKslB,SAAS5kB,GAAG,SAAUV,KAAKylB,aAAczlB,OAGhDimB,iBAzD6B,WA0D3BjmB,KAAKe,IAAI,CACPW,YAAatC,EAAE8B,SAASwd,KACxBvd,UAAWnB,KAAKkmB,mBAChB7kB,KAAMrB,KAAKqlB,cACXgB,QAASrmB,KAAKmmB,kBACbnmB,MAEHA,KAAKslB,SAAS/kB,KAAKQ,IAAI,UAAWf,KAAKylB,aAAczlB,MACrDA,KAAKslB,SAASvkB,IAAI,SAAUf,KAAKylB,aAAczlB,OAIjDsmB,wBAtE6B,SAsELC,EAASC,GAC/B,IAAMhkB,EAAUxC,KAAKslB,SACfhlB,EAAMkC,EAAQjC,KAEdkmB,EAAcnmB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmBmjB,GACrC3Y,EAAWtN,EAAI8C,mBAAmBojB,GAClCE,EAAsB1mB,KAAK2mB,IAAIF,EAAa9Y,GAC5CiZ,EAAmB5mB,KAAK2mB,IAAIF,EAAa7Y,GAE/C,OAAOvC,KAAKwb,KAAKD,EAAmBF,IAItCC,IApF6B,SAoFzB5C,EAAG5E,GACL,IAAM2H,EAAK/C,EAAE9f,EAAIkb,EAAElb,EACb8iB,EAAKhD,EAAE7f,EAAIib,EAAEjb,EAEnB,OAAOmH,KAAKC,IAAIwb,EAAI,GAAKzb,KAAKC,IAAIyb,EAAI,IAIxCC,oBA5F6B,SA4FTT,EAASC,GAC3B,IAAMhkB,EAAUxC,KAAKslB,SACfhlB,EAAMkC,EAAQjC,KAGdkmB,EAAcnmB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmBmjB,GACrC3Y,EAAWtN,EAAI8C,mBAAmBojB,GAElCS,EACJ5b,KAAK6b,MAAMT,EAAYviB,EAAIyJ,EAAYzJ,EAAGuiB,EAAYxiB,EAAI0J,EAAY1J,GAMxE,OAHEoH,KAAK6b,MAAMT,EAAYviB,EAAI0J,EAAS1J,EAAGuiB,EAAYxiB,EAAI2J,EAAS3J,GAGhDgjB,M,eC5GtB7nB,EAAE+nB,iBAAmB/nB,EAAE2lB,WAAWxlB,OAAO,CACvCC,QAAS,CACPwlB,KAAM,aACNC,KAAM7lB,EAAE6lB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZuC,WAarC,IAAM7iB,EAAUxC,KAAKslB,SACfhlB,EAAMkC,EAAQjC,KACdolB,EAAenjB,EAAQW,UAAUnD,KAAKulB,SACtCK,EAAY5lB,KAAKwlB,YACjB7Y,EAAQ3M,KAAKgnB,oBAAoBrB,EAAcC,GAC/C/Z,EAAQ7L,KAAKsmB,wBAAwBX,EAAcC,GAE3C,IAAVjZ,GAAenK,EAAQ6K,SAASV,EAAO,OAE3C,IAAIhG,EAAenE,EAAQmE,aACtBA,IAAgBA,EAAe,IAEpC,IAAMygB,EAAU9mB,EAAI+mB,uBAAuB7kB,EAAQW,UAAU,IACvDmkB,EAAUhnB,EAAI+mB,uBAAuB7kB,EAAQW,UAAU,IACvD+L,EAAI7D,KAAKkc,IAAIH,EAAQnjB,EAAIqjB,EAAQrjB,GACjCmL,EAAI/D,KAAKkc,IAAIH,EAAQljB,EAAIojB,EAAQpjB,GACtBmH,KAAKwb,KAAK3X,EAAIA,EAAIE,EAAIA,GACxBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAEhBrJ,EAAQoJ,QAAQ,IAIpB6Z,aArCuC,WAsCrCzlB,KAAKse,UAAUte,KAAKslB,SAASniB,UAAUnD,KAAKulB,aAIhDnmB,EAAEmb,iBAAmB,SAAC/X,EAASwT,EAAKxW,GAClC,OAAO,IAAIJ,EAAE+nB,iBAAiB3kB,EAASwT,EAAKxW,K,eC3C9CJ,EAAEooB,WAAapoB,EAAE2lB,WAAWxlB,OAAO,CACjCC,QAAS,CACPwlB,KAAM,OACNyC,aAAa,EACbxC,KAAM7lB,EAAE6lB,KAAK,CAEXC,QAAS,ycACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBvkB,SAZiC,SAYxBP,GACPN,KAAK0nB,gBACLtoB,EAAE2lB,WAAW9kB,UAAUY,SAASX,KAAKF,KAAMM,IAG7C0lB,eAjBiC,WAkB/B,IAAMf,EAAOjlB,KAAKuB,aAElBnC,EAAE2lB,WAAW9kB,UAAU+lB,eAAe9lB,KAAKF,MAE3CZ,EAAE8B,SAASR,GAAGukB,EAAM,CAClBzjB,UAAWxB,KAAK2nB,WAChBC,QAAS5nB,KAAK6nB,aACb7nB,MAEHZ,EAAE8B,SAASR,GAAGsR,SAAU,eAAgBhS,KAAK6nB,YAAa7nB,OAG5DimB,iBA9BiC,WA+B/B,IAAMhB,EAAOjlB,KAAKuB,aAElBnC,EAAE2lB,WAAW9kB,UAAU+lB,eAAe9lB,KAAKF,MAE3CZ,EAAE8B,SAASH,IAAIkkB,EAAM,CACnBzjB,UAAWxB,KAAK2nB,WAChBC,QAAS5nB,KAAK6nB,aACb7nB,MAEHZ,EAAE8B,SAASH,IAAIiR,SAAU,eAAgBhS,KAAK6nB,YAAa7nB,OAI7DqlB,cA5CiC,aA+CjCI,aA/CiC,WAgD/BzlB,KAAKse,UAAUte,KAAKslB,SAASniB,UAAUnD,KAAKulB,WAG9CoC,WAnDiC,SAmDtB3mB,GACT,IAAMiH,EAAKjI,KAAKslB,SAASpM,YACnBpX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAKslB,SAAS9kB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAKslB,SAASpb,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAKslB,WAA/D,CAIA,IAAMwC,EAAahmB,EAAK0Y,aAExBxa,KAAK+nB,OAASrG,WAAWtiB,EAAEwD,MAAK,WAC1B5C,KAAKgoB,UAAYC,aAAajoB,KAAKgoB,UAElChoB,KAAKkoB,aAGRJ,EAAWjmB,WAAU,SAASyX,GACxBtZ,OAASsZ,GAAUA,EAAO6O,kBAHhCnoB,KAAKooB,YAAY,UAAW,CAACC,WAAW,IAO1CroB,KAAKsoB,gBACJtoB,MAAO,OAGZ6nB,YA7EiC,SA6ErB7mB,GACV,IAAMiH,EAAKjI,KAAKslB,SAASpM,YACnBpX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAKslB,SAAS9kB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAKslB,SAASpb,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAKslB,WAA/D,CAIA,IAAMwC,EAAahmB,EAAK0Y,aAEpBxZ,EAAEunB,gBAAkBvW,UACtB8V,EAAWjmB,WAAU,SAASyX,GAC5BA,EAAO6O,kBAIPnoB,KAAK+nB,QAAUE,aAAajoB,KAAK+nB,QAErC/nB,KAAKgoB,SAAWtG,WAAWtiB,EAAEwD,MAAK,WAChC5C,KAAKmoB,iBACJnoB,MAAO,SAIdZ,EAAEqb,WAAa,SAASjY,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAEooB,WAAWhlB,EAASwT,EAAKxW,K,eCvGxCJ,EAAEopB,aAAeppB,EAAE2lB,WAAWxlB,OAAO,CACnCC,QAAS,CACPwlB,KAAM,SACNC,KAAM7lB,EAAE6lB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZmC,WAajC,IAAM7iB,EAAUxC,KAAKslB,SACfK,EAAenjB,EAAQW,UAAUnD,KAAKulB,SACtCK,EAAY5lB,KAAKwlB,YACjB7Y,EAAQ3M,KAAKgnB,oBAAoBrB,EAAcC,GAMrDpjB,EAAQ6K,SAASV,EAAO,QAG1B8Y,aAzBmC,WA0BjCzlB,KAAKse,UAAUte,KAAKslB,SAASniB,UAAUnD,KAAKulB,aAIhDnmB,EAAEib,aAAe,SAAS7X,EAASwT,EAAKxW,GACtC,OAAO,IAAIJ,EAAEopB,aAAahmB,EAASwT,EAAKxW,K,eC/B1CJ,EAAEqpB,YAAcrpB,EAAE2lB,WAAWxlB,OAAO,CAClCC,QAAS,CACPwlB,KAAM,QACNC,KAAM7lB,EAAE6lB,KAAK,CACXC,QAEE,iiEACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZkC,WAahC,IAAM7iB,EAAUxC,KAAKslB,SACfhlB,EAAMkC,EAAQjC,KAChBoG,EAAenE,EAAQmE,aACrBgf,EAAenjB,EAAQW,UAAUnD,KAAKulB,SACtCK,EAAY5lB,KAAKwlB,YACjB3Z,EAAQ7L,KAAKsmB,wBAAwBX,EAAcC,GAOpDjf,IAAgBA,EAAe,IACpC,IAAMygB,EAAU9mB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDmkB,EAAUhnB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnD+L,EAAI7D,KAAKkc,IAAIH,EAAQnjB,EAAIqjB,EAAQrjB,GACjCmL,EAAI/D,KAAKkc,IAAIH,EAAQljB,EAAIojB,EAAQpjB,GACtBmH,KAAKwb,KAAK3X,EAAIA,EAAIE,EAAIA,GAExBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAMhBrJ,EAAQoJ,QAAQ,IAIpB6Z,aA3CkC,WA4ChCzlB,KAAKse,UAAUte,KAAKslB,SAASniB,UAAUnD,KAAKulB,aAIhDnmB,EAAE6a,YAAc,SAASzX,EAASwT,EAAKxW,GACrC,OAAO,IAAIJ,EAAEqpB,YAAYjmB,EAASwT,EAAKxW,K,eCjDzCJ,EAAE0Q,iBAAmB1Q,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBiI,iBAAmB,GAEtCvT,EAAEsL,iBAAiBge,WAAatpB,EAAE2gB,SAAS4I,QAAQppB,OAAO,IAE1DH,EAAE0Q,iBAAiB2F,WAAa,SAASjW,GACvC,OAAO,IAAIJ,EAAEsL,iBAAiBge,WAAWlpB,IAI3CJ,EAAEC,sBAAsBsQ,aAAY,WAElC3P,KAAK4oB,QAAU,CACbxpB,EAAE8W,aACF9W,EAAEyV,aACFzV,EAAEiV,WACFjV,EAAE8U,cAIJ9U,EAAEC,sBAAsBoT,KAAKiH,MAAQ,CACnCoB,KAAM1b,EAAEiV,WACRwU,OAAQzpB,EAAE8U,cAGZ,IAAM6P,EAAI/jB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAK4oB,QAE7D5oB,KAAKQ,QAAUpB,EAAEmH,sBAAsBzE,KAAK9B,KAAM,CAACiT,QAAS8Q,Q,cC7B9D3kB,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEsL,iBAAiBC,SAAWvL,EAAE2gB,SAAS+I,MAAMvpB,OAAO,CACpDC,QAAS,CACPupB,OAAQ,CAAC,GAAI,KAGfjpB,WALoD,SAKzC0K,EAAQhL,GACjBJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAE2gB,SAAS+I,MAAM7oB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQhL,IAG3D0Q,SAVoD,SAU3C5P,EAAKya,GACZ/a,KAAKM,IAAMA,EACXN,KAAK+a,GAAKA,GAGZiO,MAfoD,WAgBlD,GAAIhpB,KAAKipB,IACP,OAAOjpB,KAAKipB,IAAIC,UAIpB1K,UArBoD,SAqB1C2K,GAER,IADA,IAAIH,EAAQhpB,KAAKgpB,QACRhmB,EAAI,EAAGA,EAAIgmB,EAAMnkB,OAAQ7B,IAAK,CACrC,IAAIomB,EAAOJ,EAAMjT,KAAK/S,GAAGkmB,SAAS,GAClC,GAAI9pB,EAAE6C,QAAQQ,SAAS2mB,EAAMD,GAE3B,OADAC,EAAKC,QACED,EAGX,OAAO,KAIXhqB,EAAE0Q,iBAAiBuO,SAAW,SAAS7T,EAAQhL,GAC7C,OAAO,IAAIJ,EAAEsL,iBAAiBC,SAASH,EAAQhL,IAGjDJ,EAAEoH,wBAAwBmJ,aAAY,WAEpC3P,KAAK4oB,QAAU,CACbxpB,EAAEwgB,WACFxgB,EAAEskB,YACFtkB,EAAEqgB,cACFrgB,EAAEmkB,aACFnkB,EAAE+iB,iBACF/iB,EAAEiV,WACFjV,EAAEmd,cACFnd,EAAEud,gBACFvd,EAAEyd,aACFzd,EAAE8W,aACF9W,EAAEyV,cAIJzV,EAAEsL,iBAAiB+H,KAAKiH,MAAQ,CAC9BrY,KAAMjC,EAAEwgB,WACR/T,MAAOzM,EAAEskB,YACT/I,QAASvb,EAAEqgB,cACX7E,OAAQxb,EAAEmkB,aACV1I,WAAYzb,EAAE+iB,iBACdrH,KAAM1b,EAAEiV,YAGV,IAAM0P,EAAI/jB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAK4oB,QAE7D5oB,KAAKQ,QAAUpB,EAAE0Q,iBAAiBhO,KAAK9B,KAAM,CAACiT,QAAS8Q,Q,eCrEzD3kB,EAAEkqB,QAAUlqB,EAAEmqB,MAAMhqB,OAAO,CAEzBiqB,KAAM,2CAENC,SAAU,GAEVpX,OANyB,WAQvB,OADArS,KAAK0pB,WAAW1pB,KAAKypB,UACdzpB,KAAKwpB,MAGdE,WAXyB,SAWdC,GACT3pB,KAAKwpB,MAAQG,M,eCdjBvqB,EAAEgT,iBAAmBhT,EAAEkqB,QAAQ/pB,OAAO,CAEpCkqB,SAEI,8T,eCHNrqB,EAAEqhB,eAAiBrhB,EAAEkqB,QAAQ/pB,OAAO,CAClCkqB,SACE,uqT,eCHJrqB,EAAEsQ,IAAIka,aAAa,CACjBC,cAAc,EACdC,SAAS,IAOX1qB,EAAEsQ,IAAIqa,aAAe3qB,EAAEsQ,IAAIsa,QAAQzqB,OAAO,CACxCO,WADwC,SAC7BQ,GACTN,KAAKO,KAAOD,EACZN,KAAKoQ,WAAa9P,EAAI8P,WACtBpQ,KAAKiqB,MAAQ3pB,EAAI4pB,OAAOC,YACxBnqB,KAAKoqB,mBAAqB,EAC1B9pB,EAAII,GAAG,SAAUV,KAAKqqB,SAAUrqB,OAGlCkQ,SATwC,WAUtC9Q,EAAE8B,SAASR,GAAGV,KAAKoQ,WAAY,YAAapQ,KAAKsqB,aAActqB,OAGjE8Q,YAbwC,WActC1R,EAAE8B,SAASH,IAAIf,KAAKoQ,WAAY,YAAapQ,KAAKsqB,aAActqB,OAGlEuqB,MAjBwC,WAkBtC,OAAOvqB,KAAKwqB,QAGdH,SArBwC,WAsBtCjrB,EAAE6C,QAAQ8O,OAAO/Q,KAAKiqB,cACfjqB,KAAKiqB,OAGdQ,YA1BwC,WA2BtCzqB,KAAKoqB,mBAAqB,EAC1BpqB,KAAKwqB,QAAS,GAGhBE,yBA/BwC,WAgCN,IAA5B1qB,KAAKoqB,qBACPnC,aAAajoB,KAAKoqB,oBAClBpqB,KAAKoqB,mBAAqB,IAI9BE,aAtCwC,SAsC3BtpB,GACX,IAAKA,EAAE8B,UAAyB,IAAZ9B,EAAE2pB,OAA4B,IAAb3pB,EAAEyQ,OACrC,OAAO,EAKTzR,KAAK0qB,2BACL1qB,KAAKyqB,cAELrrB,EAAE6C,QAAQ2oB,uBACVxrB,EAAE6C,QAAQ4oB,mBAEV7qB,KAAK8qB,YAAc9qB,KAAKO,KAAKwqB,2BAA2B/pB,GAExD5B,EAAE8B,SAASR,GAAGsR,SAAU,CACtBtQ,YAAatC,EAAE8B,SAASwd,KACxBsM,UAAWhrB,KAAKirB,aAChBrD,QAAS5nB,KAAKkrB,YACblrB,OAGLirB,aA5DwC,SA4D3BjqB,GACNhB,KAAKwqB,SACRxqB,KAAKwqB,QAAS,EAEdxqB,KAAKmrB,KAAO/rB,EAAE6C,QAAQgP,OAAO,MAAO,mBAAoBjR,KAAKoQ,YAC7DhR,EAAE6C,QAAQ4N,SAAS7P,KAAKoQ,WAAY,qBAEpCpQ,KAAKO,KAAKsI,KAAK,iBAGjB7I,KAAKorB,OAASprB,KAAKO,KAAKwqB,2BAA2B/pB,GAEnDhB,KAAKqrB,QAAUjsB,EAAEksB,OAAOtrB,KAAK8qB,YAAa9qB,KAAKorB,QAC/C,IAAIG,EAAOvrB,KAAKqrB,QAAQG,UAExBpsB,EAAE6C,QAAQwpB,YAAYzrB,KAAKmrB,KAAMnrB,KAAKqrB,QAAQK,KAE9C1rB,KAAKmrB,KAAKhf,MAAMpG,MAAQwlB,EAAKtnB,EAAI,KACjCjE,KAAKmrB,KAAKhf,MAAMnG,OAASulB,EAAKrnB,EAAI,MAGpCynB,QAjFwC,WAkFlC3rB,KAAKwqB,SACPprB,EAAE6C,QAAQ8O,OAAO/Q,KAAKmrB,MACtB/rB,EAAE6C,QAAQ8R,YAAY/T,KAAKoQ,WAAY,sBAGzChR,EAAE6C,QAAQ2pB,sBACVxsB,EAAE6C,QAAQ4pB,kBAEVzsB,EAAE8B,SAASH,IAAIiR,SAAU,CACvBtQ,YAAatC,EAAE8B,SAASwd,KACxBsM,UAAWhrB,KAAKirB,aAChBrD,QAAS5nB,KAAKkrB,YACblrB,OAGLkrB,WAjGwC,SAiG7BlqB,GACT,IAAgB,IAAZA,EAAE2pB,OAA4B,IAAb3pB,EAAEyQ,UAIvBzR,KAAK2rB,UAEA3rB,KAAKwqB,QAAV,CAIAxqB,KAAK0qB,2BACL1qB,KAAKoqB,mBAAqB1I,WACtBtiB,EAAE6N,KAAKrK,KAAK5C,KAAKyqB,YAAazqB,MAAO,GAEzC,IAAIsrB,EAASlsB,EAAE4K,aACXhK,KAAKO,KAAKurB,uBAAuB9rB,KAAKqrB,QAAQU,iBAC9C/rB,KAAKO,KAAKurB,uBAAuB9rB,KAAKqrB,QAAQW,gBAG9CjhB,EAAO/K,KAAKO,KAAKuJ,UACjBT,EAASrJ,KAAKO,KAAKgJ,YAGvB+hB,EAAStrB,KAAKO,KAAKmU,8BAA8B4W,EAAQvgB,EAAM1B,GAE/DrJ,KAAKO,KAAKsI,KAAK,gBAAiB,CAAC2L,iBAAkB8W,QAIvDlsB,EAAEsQ,IAAIC,YAAY,aAAc,eAAgBvQ,EAAEsQ,IAAIqa,e,eCxItD3qB,EAAEsQ,IAAIka,aAAa,CACjBhhB,mBAAmB,IAOrBxJ,EAAEsQ,IAAIuc,kBAAoB7sB,EAAEsQ,IAAIwc,gBAAgB3sB,OAAO,CACrDkB,OADqD,WAEnD,IAAMH,EAAMN,KAAKO,KAEjB,OAAIP,KAAKyT,WAGLnT,EAAIqI,gBAAgB3G,WACtB1B,EAAIqI,gBAAgB7H,UAGtBd,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAVuBlQ,MAc9Bc,QAlBqD,WAmBnD,OAAKd,KAAKyT,UAEVzT,KAAKyT,UAAW,EAChBzT,KAAK8Q,cAEE9Q,MALsBA,MAQ/BmsB,cA3BqD,SA2BvCnrB,GACZ,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGTD,GAAMA,EAAG9Q,WAEbxC,EAAI8rB,UAAY,EAChBpsB,KAAKO,KAAK8rB,cAAgB3K,YAAW,WACd,IAAjBphB,EAAI8rB,UACN9rB,EAAI8rB,SAAW,EACf9rB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQilB,OAAU1Y,GAAMA,EAAG2Y,mBAAmBC,kBAClDlsB,EAAIuI,KAAK,cAGZ,OAGL4jB,eAhDqD,WAiDnD,IAAMnsB,EAAMN,KAAKO,KACXmsB,EAASpsB,EAAIqsB,QAEnBjL,YAAW,WACTphB,EAAI8rB,SAAW,EACfnE,aAAa3nB,EAAI+rB,iBAChB,GAEEK,IAE0B,IAA3BA,EAAOltB,QAAQ8Y,SACjBoU,EAAOltB,QAAQ8Y,QAAU,EACzBoU,EAAOxR,WAAW,KAElBwR,EAAOltB,QAAQ8Y,QAAU,EACzBoU,EAAOxR,WAAW,QAKxB9b,EAAEsQ,IAAIC,YAAY,aAAc,oBAAqBvQ,EAAEsQ,IAAIuc,oB,eCxE3D7sB,EAAEsQ,IAAIwc,gBAAgBU,QAAQ,CAC5B1c,SAD4B,WAE1BlQ,KAAKO,KAAKG,GAAG,CACX2oB,MAAOrpB,KAAKmsB,cACZhT,SAAUnZ,KAAKysB,gBACdzsB,OAGL8Q,YAR4B,WAS1B9Q,KAAKO,KAAKQ,IAAI,CACZsoB,MAAOrpB,KAAKmsB,cACZhT,SAAUnZ,KAAKysB,gBACdzsB,OAGLS,OAf4B,WAgB1B,OAAIT,KAAKyT,UAGLzT,KAAKO,KAAKqI,mBACR5I,KAAKO,KAAKqI,kBAAkB5G,YAMlChC,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAbuBlQ,MAiB9Bc,QAjC4B,WAkC1B,OAAKd,KAAKyT,UAGVzT,KAAKO,KAAKsI,KAAK,kBAEf7I,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAPsBA,MAU/BmsB,cA5C4B,SA4CdnrB,GACZ,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGTD,GAAMA,EAAG9Q,WAEbxC,EAAI8rB,UAAY,EAChBpsB,KAAKO,KAAK8rB,cAAgB3K,YAAW,WACd,IAAjBphB,EAAI8rB,UACN9rB,EAAI8rB,SAAW,EACf9rB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQilB,OAAU1Y,GAAMA,EAAG2Y,mBAAmBC,kBAIlDlsB,EAAIusB,cAAcjZ,EAAI,WAAY,CAACtT,MAGtC,OAGLmsB,eApE4B,SAoEbzrB,GACb,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAOb,GALA6N,YAAW,WACTphB,EAAI8rB,SAAW,EACfnE,aAAa3nB,EAAI+rB,iBAChB,IAEEzY,EAAM,OAAO,EAElB,IAAMkZ,EAAUxsB,EAAIwJ,UACdxG,EAAQhD,EAAId,QAAQutB,UACpBhiB,EAAO6I,EAAG9Q,SAAWgqB,EAAUxpB,EAAQwpB,EAAUxpB,EAEnB,WAAhChD,EAAId,QAAQmJ,gBACdrI,EAAI0sB,QAAQjiB,GAEZzK,EAAI2sB,cAAcjsB,EAAEksB,eAAgBniB,O,eC1F1C3L,EAAEsQ,IAAIkd,QAAQ,CAEZR,SAAU,EAEVe,gBAJY,SAII9W,GAiCd,OA9BAA,EAAOrW,KAAKotB,cAAgBhuB,EAAEG,OAAO,CACnC8tB,cAAe,GACfC,QAAS,GACTC,cAAe,GACfC,QAAS,EACTd,QAAQ,EACRe,aAAc,EACd7kB,mBAAmB,GAClByN,IAEOqW,SACR1sB,KAAKotB,cAAgBhuB,EAAEG,OAAOS,KAAKotB,cAAe,CAChDK,aAAcpX,EAAKqW,OAAS,OAAIrX,EAChCzM,oBAAmByN,EAAKqW,aAAgBrX,KAI5CrV,KAAK0tB,cAAgBtuB,EAAEuuB,UAnBX,oDAmB0B,CACpCL,QAASjX,EAAKiX,QACdC,cAAelX,EAAKkX,cACpBC,QAASnX,EAAKmX,QACdlV,QAASjC,EAAKgX,gBACbzb,MAAM5R,MAELqW,EAAKqW,OAAU1sB,KAAK4tB,WAAWvX,GAGjCrW,KAAK4I,uBAAoByM,EAGpBrV,MAGT4tB,WAxCY,SAwCDvX,GAsBT,OAnB0B,IAAtBA,EAAKoX,cAA4C,IAAtBpX,EAAKoX,eAClCpX,EAAKoX,aAAe,GAGtBztB,KAAK2sB,QAAUvtB,EAAEuuB,UANL,8EAMoB,CAC9BE,YAAa,0OACbC,WAAY,OACZrG,aAAa,EACbnP,QAASjC,EAAKoX,aACdH,QAASjX,EAAKiX,QACdC,cAAelX,EAAKkX,cACpBC,QAASnX,EAAKmX,QACdO,IAAK,QACJnc,MAAM5R,MAELA,KAAKotB,cAAcxkB,mBACrB5I,KAAK4I,kBAAkBnI,SAGlBT,QAKXZ,EAAEsQ,IAAIC,aAAY,WAChB3P,KAAK4I,kBAAkB9H,UACvBd,KAAK2I,gBAAgBlI,a,eCtEvBrB,EAAE6C,QAAU7C,EAAEG,OAAOH,EAAE6C,QAAS,CAC9B7B,gBAD8B,SACd4tB,GACdhuB,KAAKyO,YAAcuf,GAGrBxf,gBAL8B,SAKdyf,GACd,IAAMhgB,EAAO7O,EAAEiI,QAAQ6G,UAAY9O,EAAEiI,QAAQ6mB,SAAW9uB,EAAEiI,QAAQ8mB,KAS5DjiB,EAAS,CACb+hB,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjBA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjB,EAAG,EAAG,EAAG,EACTA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,IAGbG,EAAMngB,EAAO,YAAc/B,EAAOyC,KAAK,KAAO,IAAM,GAQ1D,OANKV,GACH+I,QACKC,IAAI,uFAIJmX,GAGTlsB,YAjC8B,SAiClBgQ,EAAIL,GACd,IAAM3O,EAAI2O,EACV,OAAO7R,KAAKyC,SAASyP,EAAIhP,GACvBlD,KAAK+T,YAAY7B,EAAIhP,GAAKlD,KAAK6P,SAASqC,EAAIhP,IAGhDga,cAvC8B,WAwC5B,OAAO7D,OAAOgV,QAAQruB,KAAKyO,YAAY6f,qBAGzCtZ,eA3C8B,SA2CfD,GACb,GAAU,IAANA,EAAW,OAAO/U,KAAKkd,gBAE3B,IACIqR,EADE9f,EAAczO,KAAKyO,YAAY+f,qBASrC,OALED,EADyB,mBAAhB9f,EACIA,EAAYsG,GAEZtG,EAGR4K,OAAOgV,QAAQE,O,cCvD1BnvB,EAAEkS,SAAW,CAMXL,OANW,SAMJwd,GAKL,MAJI,KAAKC,KAAKD,KACZA,EAAMA,EAAIE,QAAQ,KAAM,KAIxB,4BAA8BF,EAA9B,mDACuBA,EADvB,kBAMJvM,cAlBW,SAkBGlR,EAAW4d,GACvB,IAAM3P,EAAMjO,EAAUiB,cAAc,OAEhCgN,GACF7f,EAAE6C,QAAQ4N,SAASoP,EAAK2P,IAK5BxP,YA3BW,SA2BCpO,EAAW6d,EAAMC,GACtB,KAAKJ,KAAKG,KACbA,EAAO,IAAMA,GAEV,KAAKH,KAAKI,KACbA,EAAO,IAAMA,GAGf,IAAMlQ,EAAM5N,EAAUiB,cAAc,OACpC,GAAI2M,EAAK,CACP,IAAMmQ,EAAUnQ,EAAIoQ,aAAa,gBAAkBH,EAAOC,EAAOD,EAEjE,OADAjQ,EAAI1N,aAAa,aAAc6d,GACxBA,EAET,OAAO,GAGTjd,YA5CW,SA4CCd,EAAWie,EAAQC,GAC7B,IAAMH,EAAU/d,EAAUge,aAAa,WAAaC,EAASC,EAASD,EAMtE,OAJAje,EAAUE,aAAa,QAAS6d,GAC5B/d,EAAUme,aAAa,eACzBne,EAAUE,aAAa,aAAc6d,GAEhCA,K,eCnDX3vB,EAAE+G,UAAY,CAEZC,cAFY,SAEE5D,GACZ,IAAIlC,EAAMkC,EAAQjC,KAMlB,OAAe,IAJJD,EACN8C,mBAAmBZ,EAAQW,UAAU,IACrCisB,WAAW9uB,EAAI8C,mBAAmBZ,EAAQW,UAAU,KAEnCX,EAAQjB,aAAawE,S,eCT/C3G,EAAEmQ,WAAa,CAGb8f,IAHa,SAGTpB,GACF,MAAO,CACLA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAK/DqB,OAZa,SAYNvL,EAAG5E,GACR,IACInc,EADEE,EAAI,GAGV,IAAKF,EAAI,EAAGA,EAAI,EAAGA,IACjB,IAAK,IAAIiM,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAG1B,IAFA,IAAIsgB,EAAM,EAED9jB,EAAI,EAAGA,EAAI,EAAGA,IACrB8jB,GAAOxL,EAAE,EAAE/gB,EAAIyI,GAAG0T,EAAE,EAAE1T,EAAIwD,GAG5B/L,EAAE,EAAEF,EAAIiM,GAAKsgB,EAIjB,OAAOrsB,GAITssB,OAhCa,SAgCNvB,EAAGwB,GACR,MAAO,CACLxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAC/BxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAC/BxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,GAAKxB,EAAE,GAAGwB,EAAE,KAKnCC,OAzCa,SAyCN9L,EAAGqK,GAGR,IAFA,IAAM/hB,EAAS,GAENlJ,EAAI,EAAG2f,EAAIsL,EAAEppB,OAAQ7B,EAAI2f,EAAG3f,IACnCkJ,EAAOtG,KAAKge,EAAEqK,EAAEjrB,IAGlB,OAAOkJ,GAGTyjB,cAnDa,SAmDCC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACxC,IAAMlC,EAAI,CACR2B,EAAIE,EAAIE,EACRH,EAAIE,EAAIE,EACR,EAAG,EAAG,GAEFR,EAAIrwB,EAAEmQ,WAAWigB,OAAOpwB,EAAEmQ,WAAW8f,IAAIpB,GAAI,CAACiC,EAAIC,EAAI,IAE5D,OAAO/wB,EAAEmQ,WAAW+f,OAAOrB,EAAG,CAC5BwB,EAAE,GAAI,EAAG,EACT,EAAGA,EAAE,GAAI,EACT,EAAG,EAAGA,EAAE,MAIZnmB,QAlEa,SAkEL2kB,EAAGhqB,EAAGC,GACZ,IAAMurB,EAAIrwB,EAAEmQ,WAAWigB,OAAOvB,EAAG,CAAChqB,EAAGC,EAAG,IAExC,MAAO,CAACurB,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,KAG5BjgB,oBAxEa,SAyET4gB,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,GAEjB,IAAMvN,EAAIxkB,EAAEmQ,WAAWogB,cAAcS,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClEtR,EAAIvgB,EAAEmQ,WAAWogB,cAAcW,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClElD,EAAI7uB,EAAEmQ,WAAW+f,OAAO3P,EAAGvgB,EAAEmQ,WAAW8f,IAAIzL,IAKlD,OAAOxkB,EAAEmQ,WAAWmgB,OAAO,EAAEzB,EAAE,GAAIA,M,eCrFvC7uB,EAAEwN,SAAW,CAEXC,UAFW,SAED5I,EAAGC,GAAiB,IAAd+H,EAAc,uDAAP,MACrB,MAAgB,QAATA,EACHjM,KAAKgN,iBAAiB3B,KAAK6b,MAAMhjB,EAAGD,IACpCoH,KAAK6b,MAAMhjB,EAAGD,IAGpB+I,iBARW,SAQML,GACf,OAAgB,IAARA,EAAetB,KAAKyB,IAG9BS,iBAZW,SAYMZ,GACf,OAAQA,EAAQtB,KAAKyB,GAAM,O,eCb/B1N,EAAEe,MAAQ,CACRC,gBADQ,WAEN,IAAMqO,EAAc,CAClB6Q,YAAa,eACbE,aAAc,gBACdE,aAAc,gBACdG,UAAW,aACXmB,YAAa,eACbC,aAAc,gBACdnC,aAAc,gBACdC,UAAW,aACXqD,gBAAiB,oBACjBG,eAAgB,kBAChBK,SAAU,YACVC,WAAY,cACZM,gBAAiB,oBACjBC,qBAAsB,yBACtBE,aAAc,wBACdE,YAAa,eACbG,WAAY,cACZE,aAAc,iBACdC,YAAa,gBACbE,aAAc,gBACdsK,mBACE,qEACFE,qBACE,wEAGJ,GAAKxuB,KAAKR,QAAQiP,YAIhB,IAAK,IAAMkF,KAAOlF,EACXzO,KAAKR,QAAQiP,YAAYkP,eAAehK,KAC3C3T,KAAKR,QAAQiP,YAAYkF,GAAOlF,EAAYkF,SALhD3T,KAAKR,QAAQiP,YAAcA,EAU7BrP,EAAE6C,QAAQ7B,gBAAgBJ,KAAKR,QAAQiP,cAGzC0E,aA3CQ,SA2CK6a,EAAKra,EAAKyd,GAErB,MADY,CAACzd,EAAKyd,GACP3sB,QAAO,SAASupB,EAAKviB,GAC9B,OAAOuiB,GAAOA,EAAIviB,KACjBuiB,OC7CPqD,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,O","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
    ' +\n /* eslint-disable */\n '' +\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\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 = 1;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n enable(e) {\n if (e) { L.DomEvent.preventDefault(e); };\n if (e) { L.DomEvent.stopPropagation(e); };\n if (this._enabled) { return; };\n this._enabled = true;\n if (this.addHooks) { this.addHooks(); };\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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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\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\nconsole.log(opacities);\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.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 var edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 var map = overlay._map;\n\n var 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 var 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","isNaN","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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 From d1b20e0711673e15c7b803134e87719818e84c7e Mon Sep 17 00:00:00 2001 From: themacboy Date: Wed, 26 Oct 2022 22:46:05 +0200 Subject: [PATCH 59/73] bug barra colorize mal activada --- dist/leaflet.distortableimage.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 70ab3a1d1..0deac706a 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -236,7 +236,7 @@ a.leaflet-toolbar-icon[title='Loading...'] { color:#0087A8 !important; float: none !important; margin: auto !important; - z-index:999; + z-index:9999; } .leaflet-toolbar-1 li:last-child a { From 14b40fb82d661a981b0914589fb280282cf1c016 Mon Sep 17 00:00:00 2001 From: themacboy Date: Thu, 27 Oct 2022 11:59:49 +0200 Subject: [PATCH 60/73] cleaning --- dist/leaflet.distortableimage.css | 2 +- src/edit/actions/EditAction.js | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 0deac706a..c40dd77d3 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -236,7 +236,7 @@ a.leaflet-toolbar-icon[title='Loading...'] { color:#0087A8 !important; float: none !important; margin: auto !important; - z-index:9999; + z-index:900; } .leaflet-toolbar-1 li:last-child a { diff --git a/src/edit/actions/EditAction.js b/src/edit/actions/EditAction.js index 9aacaf3d7..ed8073575 100644 --- a/src/edit/actions/EditAction.js +++ b/src/edit/actions/EditAction.js @@ -23,14 +23,6 @@ L.EditAction = L.Toolbar2.Action.extend({ this._injectIconSet(); }, - enable(e) { - if (e) { L.DomEvent.preventDefault(e); }; - if (e) { L.DomEvent.stopPropagation(e); }; - if (this._enabled) { return; }; - this._enabled = true; - if (this.addHooks) { this.addHooks(); }; - }, - _createIcon(toolbar, container, args) { const iconOptions = this.options.toolbarIcon; const className = iconOptions.className; From fc05dfebfe2004eaa0006969acae6fc7c162ae77 Mon Sep 17 00:00:00 2001 From: themacboy Date: Thu, 27 Oct 2022 12:43:27 +0200 Subject: [PATCH 61/73] rebuild --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index bfa0314f3..15e2ec8b4 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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()},enable:function(t){t&&L.DomEvent.preventDefault(t),t&&L.DomEvent.stopPropagation(t),this._enabled||(this._enabled=!0,this.addHooks&&this.addHooks())},_createIcon:function(t,e,i){var o=this,n=this.options.toolbarIcon,a=n.className,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];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)}})})),console.log(t),L.OpacitiesAction=L.EditAction.extend({initialize:function(e,i,o){var n=i.editing._mode;(o=o||{}).toolbarIcon={svg:!0,html:"opacities",tooltip:"Set custom opacity",className:"lock"===n?"disabled":""},o.subToolbar=new L.Toolbar2({actions:t}),L.DistortableImage.action_map.o="lock"===n?"":"_toggleOpacities",L.EditAction.prototype.initialize.call(this,e,i,o)},addHooks:function(){var t=this,e=this._link;L.DomUtil.hasClass(e,"subtoolbar_enabled")?(L.DomUtil.removeClass(e,"subtoolbar_enabled"),setTimeout((function(){t.options.subToolbar._hide()}),100)):L.DomUtil.addClass(e,"subtoolbar_enabled"),L.IconUtil.toggleXlink(e,"opacities","cancel"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Cancel")}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];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)}})})),console.log(t),L.OpacitiesAction=L.EditAction.extend({initialize:function(e,i,o){var n=i.editing._mode;(o=o||{}).toolbarIcon={svg:!0,html:"opacities",tooltip:"Set custom opacity",className:"lock"===n?"disabled":""},o.subToolbar=new L.Toolbar2({actions:t}),L.DistortableImage.action_map.o="lock"===n?"":"_toggleOpacities",L.EditAction.prototype.initialize.call(this,e,i,o)},addHooks:function(){var t=this,e=this._link;L.DomUtil.hasClass(e,"subtoolbar_enabled")?(L.DomUtil.removeClass(e,"subtoolbar_enabled"),setTimeout((function(){t.options.subToolbar._hide()}),100)):L.DomUtil.addClass(e,"subtoolbar_enabled"),L.IconUtil.toggleXlink(e,"opacities","cancel"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Cancel")}})},944:function(){L.OpacityAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,s=a._mode;a._transparent?(o="opacity_empty",n=e.options.translation.makeImageOpaque):(o="opacity",n=e.options.translation.makeImageTransparent),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===s?"disabled":""},L.DistortableImage.action_map.o="lock"===s?"":"_toggleOpacity",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing,e=this._link;L.IconUtil.toggleXlink(e,"opacity","opacity_empty"),L.IconUtil.toggleTitle(e,"Make Image Transparent","Make Image Opaque"),t._toggleOpacity()}})},954:function(){L.RestoreAction=L.EditAction.extend({initialize:function(t,e,i){var o=L.Utils.getNestedVal(e,"editing","_mode"),n=e.edited;(i=i||{}).toolbarIcon={svg:!0,html:"restore",tooltip:e.options.translation.restoreImage,className:n&&"lock"!==o?"":"disabled"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay;L.DomEvent.on(t,{edit:this._enableAction,restore:this._disableAction},this),t.restore()}})},178:function(){L.RotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"rotate",tooltip:e.options.translation.rotateImage,className:"rotate"},L.DistortableImage.action_map.r="_rotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._rotateMode()}})},547:function(){L.ScaleAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"scale",tooltip:e.options.translation.scaleImage,className:"scale"},L.DistortableImage.action_map.s="_scaleMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._scaleMode()}})},886:function(){L.StackAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a._toggledImage?(o="flip_to_back",n=e.options.translation.stackToFront):(o="flip_to_front",n=e.options.translation.stackToBack),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===a._mode?"disabled":""},L.DistortableImage.action_map.q="lock"===a._mode?"":"_stackUp",L.DistortableImage.action_map.a="lock"===a._mode?"":"_stackDown",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"flip_to_front","flip_to_back"),L.IconUtil.toggleTitle(this._link,"Stack to Front","Stack to Back"),t._toggleOrder()}})},129:function(){L.UnlockAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"unlock",tooltip:e.options.translation.unlockImages},L.DistortableImage.group_action_map.u="_unlockGroup",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._unlockGroup()}})},743:function(){L.EXIF=function(t){if(0!==Object.keys(EXIF.getAllTags(t)).length){console.log(EXIF.getAllTags(t));var e=EXIF.getAllTags(t);void 0!==e.GPSLatitude&&void 0!==e.GPSLongitude&&(e.GPSLatitude[0],e.GPSLatitude[1],e.GPSLatitude[2],e.GPSLongitude[0],e.GPSLongitude[1],e.GPSLongitude[2],e.GPSLatitudeRef,e.GPSLongitudeRef),"T"===e.GPSImgDirectionRef||"M"===e.GPSImgDirectionRef?(Math.PI,e.GPSImgDirection.numerator,e.GPSImgDirection.denominator):console.log("No compass data found"),console.log("Orientation:",e.Orientation),(6===e.Orientation||8===e.Orientation||3===e.Orientation)&&Math.PI,void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&void 0!==e.GPSAltitude&&void 0!==e.GPSAltitudeRef&&(e.GPSAltitude.numerator,e.GPSAltitude.denominator,e.GPSAltitudeRef)}else alert("EXIF initialized. Press again to view data in console.")}},92:function(){L.DistortHandle=L.EditHandle.extend({options:{TYPE:"distort",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){this._handled.setCorner(this._corner,this.getLatLng())},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.distortHandle=function(t,e,i){return new L.DistortHandle(t,e,i)}},194:function(){L.DragHandle=L.EditHandle.extend({options:{TYPE:"drag",icon:L.icon({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=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng();t.dragBy(e,i)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.dragHandle=function(t,e,i){return new L.DragHandle(t,e,i)}},988:function(){L.EditHandle=L.Marker.extend({initialize:function(t,e,i){var o=t.getCorner(e);L.setOptions(this,i),this._handled=t,this._corner=e;var n={draggable:!0,zIndexOffset:10};i&&i.hasOwnProperty("draggable")&&(n.draggable=i.draggable),L.Marker.prototype.initialize.call(this,o,n)},onAdd:function(t){L.Marker.prototype.onAdd.call(this,t),this._bindListeners(),this.updateHandle()},onRemove:function(t){this._unbindListeners(),L.Marker.prototype.onRemove.call(this,t)},_onHandleDragStart:function(){this._handled.fire("editstart")},_onHandleDragEnd:function(){this._fireEdit()},_fireEdit:function(){this._handled.edited=!0,this._handled.fire("edit")},_bindListeners:function(){this.on({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.on("zoomend",this.updateHandle,this),this._handled.on("update",this.updateHandle,this)},_unbindListeners:function(){this.off({contextmenu:L.DomEvent.stop,dragstart:this._onHandleDragStart,drag:this._onHandleDrag,dragend:this._onHandleDragEnd},this),this._handled._map.off("zoomend",this.updateHandle,this),this._handled.off("update",this.updateHandle,this)},_calculateScalingFactor:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=this._d2(n,a),l=this._d2(n,s);return Math.sqrt(l/r)},_d2:function(t,e){var i=t.x-e.x,o=t.y-e.y;return Math.pow(i,2)+Math.pow(o,2)},calculateAngleDelta:function(t,e){var i=this._handled,o=i._map,n=o.latLngToLayerPoint(i.getCenter()),a=o.latLngToLayerPoint(t),s=o.latLngToLayerPoint(e),r=Math.atan2(n.y-a.y,n.x-a.x);return Math.atan2(n.y-s.y,n.x-s.x)-r}})},206:function(){L.FreeRotateHandle=L.EditHandle.extend({options:{TYPE:"freeRotate",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._map,i=t.getCorner(this._corner),o=this.getLatLng(),n=this.calculateAngleDelta(i,o),a=this._calculateScalingFactor(i,o);0!==n&&t.rotateBy(n,"rad");var s=t.edgeMinWidth;s||(s=50);var r=e.latLngToContainerPoint(t.getCorner(0)),l=e.latLngToContainerPoint(t.getCorner(1)),c=Math.abs(r.x-l.x),d=Math.abs(r.y-l.y);Math.sqrt(c*c+d*d)>s||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 940af2f34..8e8045007 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
    ' +\n /* eslint-disable */\n '' +\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\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 = 1;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n enable(e) {\n if (e) { L.DomEvent.preventDefault(e); };\n if (e) { L.DomEvent.stopPropagation(e); };\n if (this._enabled) { return; };\n this._enabled = true;\n if (this.addHooks) { this.addHooks(); };\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.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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\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\nconsole.log(opacities);\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.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 var edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 var map = overlay._map;\n\n var 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 var 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","isNaN","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
    ' +\n /* eslint-disable */\n '' +\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\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 = 1;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (!this.mouseLeaveSkip) {\n this.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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\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\nconsole.log(opacities);\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.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 var edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 var map = overlay._map;\n\n var 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 var 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","isNaN","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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 From ba1d863561cc8e6ddebd03a8c9fc879cd7f873e6 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sat, 29 Oct 2022 08:25:07 +0200 Subject: [PATCH 62/73] afegir icones --- src/iconsets/llagrima.ai | 399 ++++++++++++++++++++++++++++++++++++++ src/iconsets/llagrima.svg | 21 ++ 2 files changed, 420 insertions(+) create mode 100644 src/iconsets/llagrima.ai create mode 100644 src/iconsets/llagrima.svg diff --git a/src/iconsets/llagrima.ai b/src/iconsets/llagrima.ai new file mode 100644 index 000000000..1b5b07fdd --- /dev/null +++ b/src/iconsets/llagrima.ai @@ -0,0 +1,399 @@ +%PDF-1.6 %âãÏÓ +1 0 obj <>/OCGs[18 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + Adobe Illustrator 25.4 (Windows) + 2022-10-22T05:13:13+02:00 + 2022-10-22T05:13:14+02:00 + 2022-10-22T05:13:14+02:00 + + + + 212 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADUAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FWCfmf+Z9l5Ssja2pW4124WtvbndYlO3qy07fyr3+WZ2j0Zymz9Lq+0e0Y4I0N5n8W XkPkD83tZ0LWZZNXnl1DTdQl9S+VzydHbrLHXv4r0I+jNrqtDGcfTsRydBoe1Z4pnjPFGXP9b6Ss L+y1CyhvbKZbi0uFDwzIaqynOelExNHm9hCcZxEomwVfIs3Yq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FWCfmf8AmfZeUrI2tqVuNduFrb253WJTt6stO38q9/lmdo9Gcps/ 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 + + + + 1 + True + False + + 14.000000 + 18.000000 + Points + + + + Cyan + Magenta + Yellow + Black + + + + + + Grupo de muestras por defecto + 0 + + + + R=6 G=120 B=168 + PROCESS + 100.000000 + RGB + 6 + 120 + 168 + + + + + + + application/pdf + + + llagrima + + + xmp.did:5539dff8-b785-b64d-83d2-ab79bf59d339 + uuid:66a5025e-d329-404f-93fe-0c9f2da6e353 + xmp.did:29f60696-e474-ae48-b3b4-af29e598b11d + proof:pdf + + xmp.iid:29f60696-e474-ae48-b3b4-af29e598b11d + xmp.did:29f60696-e474-ae48-b3b4-af29e598b11d + xmp.did:29f60696-e474-ae48-b3b4-af29e598b11d + + + + + saved + xmp.iid:29f60696-e474-ae48-b3b4-af29e598b11d + 2022-10-22T05:12:56+02:00 + Adobe Illustrator 25.4 (Windows) + / + + + saved + xmp.iid:5539dff8-b785-b64d-83d2-ab79bf59d339 + 2022-10-22T05:13:06+02:00 + Adobe Illustrator 25.4 (Windows) + / + + + + Document + AIRobin + Adobe PDF library 16.00 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 5 0 obj <>/Resources<>/Properties<>/XObject<>>>/Thumb 29 0 R/TrimBox[0.0 0.0 14.0 18.0]/Type/Page>> endobj 20 0 obj <>stream +H‰ìRËNÃ0¼û+æ¼ñ:~^i¡*TŠÄT-¨pà÷;!Ê•;Š´ë]G6ö‡›íæj´@,Óç‹yÆ;Áawtxýbóé~¸»8l?ÌaÂu…ë +÷+ÜO¸ƒ“•1ÅŠÇq¢øFÀmblW°ÏO¡N²£•qº´i0J¶¥•P +¬r+*;£Äšp2s¤ôk°I¼&®±™r¬J- ¶Šw#l$ªSU:Ç…ž¼oܼÀ:'?¥‰ÄÅËÚ"šj¿.ZøŽÐ”4 ¥?jQù[{9ʪ+˜åæY.i£$ÒZô8w+ÎæÍi*í¡‡ÿ¾ýÕ·Û=÷ƒù`��³”” +endstream endobj 21 0 obj <> endobj 29 0 obj <>stream +8;Ru>#7*!`!'L +endstream endobj 30 0 obj [/Indexed/DeviceRGB 255 31 0 R] endobj 31 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> +endstream endobj 26 0 obj <>>>/Subtype/Form>>stream +0.024 0.471 0.659 rg +/GS0 gs +q 1 0 0 1 2.1031 7.1455 cm +0 0 m +0.198 -0.978 0.677 -1.886 1.389 -2.605 c +1.393 -2.609 1.397 -2.614 1.401 -2.617 c +2.396 -3.609 3.698 -4.104 5 -4.103 c +5.011 -4.103 l +6.313 -4.099 7.613 -3.6 8.605 -2.605 c +9.339 -1.872 9.798 -0.947 9.99 0 c +h +f +Q + +endstream endobj 27 0 obj <>>>/Subtype/Form>>stream +0.024 0.471 0.659 rg +/GS0 gs +q 1 0 0 1 2 8.154 cm +0 0 m +0.001 -0.341 0.036 -0.679 0.103 -1.008 c +10.093 -1.008 l +10.162 -0.672 10.2 -0.334 10.2 0 c +10.197 1.13 9.801 2.209 9.118 3.095 c +1.084 3.095 l +0.376 2.176 0 1.076 0 0 c +f +Q + +endstream endobj 28 0 obj <>>>/Subtype/Form>>stream +0.024 0.471 0.659 rg +/GS0 gs +q 1 0 0 1 3.0844 11.249 cm +0 0 m +8.034 0 l +7.902 0.171 7.777 0.347 7.624 0.501 c +4.016 4.103 l +0.408 0.501 l +0.252 0.346 0.131 0.17 0 0 c +f +Q + +endstream endobj 34 0 obj <> endobj 25 0 obj <> endobj 33 0 obj <> endobj 32 0 obj <> endobj 18 0 obj <> endobj 35 0 obj [/View/Design] endobj 36 0 obj <>>> endobj 22 0 obj <> endobj 23 0 obj <> endobj 24 0 obj <> endobj 8 0 obj <> endobj 14 0 obj <> endobj 15 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 24.0 +%%AI8_CreatorVersion: 25.4.1 +%%For: (Themacboy .....) () +%%Title: (llagrima.svg) +%%CreationDate: 10/22/2022 5:13 AM +%%Canvassize: 16383 +%%BoundingBox: 1 2 14 17 +%%HiResBoundingBox: 1.14999997615814 2.1920086345981 13.049999833107 16.5530971036842 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%AI5_FileFormat 14.0 +%AI12_BuildNumber: 498 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%RGBProcessColor: 0.023529412224889 0.470588237047195 0.658823549747467 (R=6 G=120 B=168) +%%+ 0 0 0 ([Registro]) +%AI3_Cropmarks: 0 0 14 18.0000000000009 +%AI3_TemplateBox: 7.5 8.61000000000058 7.5 8.61000000000058 +%AI3_TileBox: -290.637786865234 -411.97509765625 304.682220458984 429.944885253906 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 2 +%AI24_LargeCanvasScale: 1 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI17_Begin_Content_if_version_gt:24 4 +%AI10_OpenToVie: -3.62237656226807 16.8687671258258 67.0482495121669 0 8197.14167034691 8192.85371350848 2256 1274 18 0 0 46 121 0 0 0 1 1 0 1 1 0 1 +%AI17_Alternate_Content +%AI9_OpenToView: -3.62237656226807 16.8687671258258 67.0482495121669 2256 1274 18 0 0 46 121 0 0 0 1 1 0 1 1 0 1 +%AI17_End_Versioned_Content +%AI5_OpenViewLayers: 7 +%AI17_Begin_Content_if_version_gt:24 4 +%AI17_Alternate_Content +%AI17_End_Versioned_Content +%%PageOrigin:-290 -411.889999999999 +%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 16 0 obj <>stream +%AI24_ZStandard_Data(µ/ý�X¥`ÚÃ;¾:�E„Î|8…ùôÿÿÿÿÿáZ~|õô¾ÜP€þÂü¿†Y¼ëñJµª«TõxÚûÿ|¨W1j`ë8¥nZn»¦ÓʤàR°NãÔTYW+…)((-7†_'ݺ-Je\V¯&ƒXýÄêGeMéú¦\Ä; �¿é�Ü6­ú¢Øuu‚[¶E@§¨4V[éûŽ­´UQn«j×7þxµx¨ñË´¾qœNT”Û²-š€Šr 6‘§¾X2^©V µ¾˜¸ÕH4œ®lª­q›j¯šÒ>­뺤§åÞ´u×ø´R4´aY§æGµ'©ï^7dËN,c‰N,Ã2�ˆL5ŽU6í|-¥šž†eZÜ®iÇÃ2”HÓšÆ2HËJË GËZ@Ó„–5-cY"-cÙ(Ò2þî;†_Ø;ø{þöÖ^sÿõ÷µþü×]Ö|÷ è=¸µµþ]Æ2–±,hYe]­õãa™DS[©§AÜø¤¦T”öº†–Q´v�·-ð° VÙâOüލö4I,ƒI± &=iòIÚ´œµ–½öiZÛšÿ@­ûß¡þ2Ø?PƒÜïþC0Ðgž»¬ío{®yïŸçÿé.kŸÖ9‚¿ïPûî;ϘÁö°Ë/IÚ´NŽXFš;IJOŽäH’'ºy÷å‡e`–§Þ&ï&–yó3ÿh’¥i¢XÆÏ~v_b™Þ(÷~tDQð Y‚&ˆe&x‚hu¨ÃÍÆa†?üáX†æ¢ùk,ã¿ûÿýïƒã'Ë3zÔãæcÿF0±ìÍñDÇLfRs²{òÉp$ÉÒDõî_øIͦæþ Ío~s$ÍÒ4Ï|êSŸ›Ÿ<ÃbÙxŽ'yžhF5G»G? I´4ÑóË`É\¢˲ÖÔá©÷ö!yntg®ùæüã Dzä%7ùÉQž»î»óï÷±“gG{öÚoï?úÐ?šþô¨Ç²üéoüûÀ/$¿ò3¿óC¿ jpƒì ?Cðƒ#H‚%h‚'ˆ‚9ÔáyØC~!bYþp ɰ Íð Ñ0ý÷ç¿ÿ¿þðÿ?~ò—ßüçGõ¸G>öÑߎáøÇq$Çr4ÇsDG,ˤ&7ÉÉNzò#A2$?9’$Y’&y’(™K]î’—½ôåW‚eXþr,ɲ,Íò,Ñ2›ÚÜ&7»éÍÏM, ÍoŽ&i–¦iž&jæSŸûäg?ýùàžÿOò,Oóõ©Q]jÓGe_‡ 5èuçšk­óif,3K2ÌÿçÐ÷ÌuÞy“ßÿÆìŸÿö‡eûÓêówšžô¥ÿ~ô¡÷Þsîµß>Ÿ½ìf';b™ï½ûÎ9ÊQ~ò“›Üä%É?AþyÞyç\óÌ3G7º±ìÜè>Ëmn’Üß÷çwßÕyŸËP}êR›º,5IêQ‡¡?í}×|k5–ef4ŸÙÌg™ÍL–™Ìå‚`ƲÏ÷¹ÎY‹Xš  ~¦7½ÙM,ë&7¹¹Í­Ílf-Ñò,ÏÒ,˲,É’,Çr,–a –`ù•¾ìe/yÉË]îR—ºÌ%JžäIbÙIšdI’$IŽäH~ò“! ’éIOv²“œÜ¤&5™ItÿñoûÓ_þPzÓ—žôX6úïCúÏ{ß=÷ÛkŸ=ÚÏnö²}쿃ýë_÷½÷Ýu×=÷“›¼ä$ùç!ùÇ;ç|ó̱ Ýç67¹Çýw¸Áým¿ûæ[ï¼ó>µ©KMê¯C êOwÍõÖYŸÙÌdóÏaþ²Ï=ó¬±l�˰ Ej[Ë–AøÖÔ×Ôr[­]aÍE¥¨ôU©æC£Ä­º¢ÒÓ’šžL|Ká>*{Zã7í¸¬kjyÏ> Ò‚WÖ5µ +ø¨ÖMë®ð …Q­Ê¶üã +üª.xE>jü¦ñ;Xc·¥©¨UœvÚƒO «/WË=iiëuãõõÑ^Õ®©UœvX×MXSºó†Wµ²éIcÕëº Ú +~½¤vZW®ôU­,›–¢XmS¶“XãSúªq»jéûŠÛµó¦mʦu³:Åé�Ÿ×WÔ©µ¯Ç©Ñ¬ñIuÁ¯Úyh¥ÁjܪXw@«j*Jk½nJ5DSß”E!®5í¤UUikÕT”æžØ´|hø¤B˜4” +€õuã“z`™›j5®—ûbÚUõb;¤Ð�ËTí·ëÛi]ïzÅêGå²îÛiW• +Ç­Új¹%ª=· Ë>œ.gNIÚ­Ç)‹’þþÿ¼¿ÖajD­/†þ0ÌO(íªZßU•v6p�u y”JBµç�_ÓöUcv$Zo­}=ÔZ·Ö>¿·ö0{®AîÃnjúgðÓ]wàס–µÿ}zkÿû{îÀO ýýÖà†_~›ïýu|¢QÔ5ä&´ªë€”u×ú¦Ä*Ò�Rj%Å­·nIjW•J’@ ¿jé¦õ2ãëª'VUoš@ò)‹²*Êå|­QT6=}TÕ›nH}oÇk zUöåɹ÷OüŽ$¯¶®F@]¨_þÜo†½ÿîï®õð‡¾ç½wøu=sÍïÏàÏüÖ}¢u¾ý~!ò¯ËOØ5ôY]¨ùTã”uµÔ„Ÿ»Pk]S`Ö›¶\î qpß^Uª‡á‘5.üt…ÔòÖŒöU< ü:ØÁßý×eÍ ö ò†>ƒ½ËÚþ÷ÖýoÏwî²F!1«Ú5ŽÕªJ[¨QTU +ƒH<ü]£¼ª©õ2@±ë‹$m­µ§­×EUvEI^3nXÆ:¥,© ಬ:ÒÒ¸UU)GkÓJ¿.ë–0¬žÜ··jëurÍmòÝÃg þ̽ï>­YsæŽkM‡ßwþ…9ﯻ­uzýÿÿÿ»î`Õ³f¶ Ë@­u­mMk\RÕ®¨öå’Û†e<äŸÖ(*�VN´)gÔ¸¦xmï¼½½½¬5Чfë®Õ�¸K[ë«JYö¡QT6^¶ Ë  Òu]×i¸¦SÚRW òºè¶a™îzç·FiÝ~Õ)Ԍۆe¹ë[ƒx¯§o ¿XV£i”×Sõ-· Ë´Üñ‰jrQãäÓIl(ѱù°lXæàb‡­Ð,bØak ‰v8S*k ™/N`1.7IDî ËrGÚ0ø†e¤à|X¸Œ‚%"wäEÊp“ÈevF?ˆÈ!Æâƒ’E8Rƒ +©j‘ÒƒUqìÁ_ 7…ùâ†e‡©’ø¬Œƒ‘j +#ª8ö²":ÂCW¦2÷ %Ôi[ZnsZhìÑñ®JžÈ(š(R¬Ú/dÁ $~‹T!¶’k$_Ã#úµ•2yji„Å}h€2)U3‹ñ %ÕUdBØë:Š…¤@x8AàªãûæO÷rkJß—‘(() ^2è.ÉÊO +´åSd¸¸l òDƒvŸîå Ë"~%‰‘†´!±ø8K\i¸ð[i r‰@7" H¯·TI’‘)åMCæ!:v$Ý,@ ÜDI¯J•7,;'—„bb´Ö3ƒF î³½íDCÊ–ñð´\ +xÂÂ9l@Q~±ø4¬„Ò)rÌ‹B>ˆRhñÁ^·a™‚ÀU¸  oð€« ”1 –!¬>ªÖz@ ÔLV@HŸ”â;D8Ù|@Q,pñ¥ ›ì]5£€7,‹è ¸É («ál¨tK&|LFÉ"Þ°l>Tǘ1ŠPI‚É騗œ–µ->ÔÁÍ–ì–‡ªPÄ 4F£’ÈÊë‘è€%›•¨?€˜£À/$1àø¤Sib�‰D"��ˆŽo ²¡Ü“júP£)?£§­d£µSëµJÐ\n‚·*j§ñ^Cê€5NYÕã'ZŽÛõu½ê�ׂYó¶îªR_�•u­ì ~WÔ]ãÔÇ­‹Æ*lz}4˪å§y¨ñýCÿÁ”ºé!ø—5ºÜ„¶îIý¨Úu¯mú:Ô಩I0y3§Ô Ë}cøÔ¦1¼šªv@]Ca‡c†G•5¥ñëº8½ø´šM`uZW +*»¦Ü·ƒRM­†Õ×ÕrËLë`}ÝÌfYµä¨±¦¶+¿Ü¼Æ©«å–¨Ù_5V[é›v4#+þ°ì ÕŒ¬Ç)u¨p*uR7:üat¿Uí¨žR´Ç)u£÷·_×eQ0ô] 8㔺ñzçÐÇíË-YV-ý˜ªïèrß‹Œ„„®¾Ò™HˆI¨¦RºlX¦†Þv[y–È%rwâ í$!²+$±a™„Œ@— D’øˆ8’Ä;9q‰–È%6o’ظ"$‰…#b€nI‚ìN\â/@_#ÁÇ 1 cÉ{u¸tÈ ËZÎ?FtËqÀªHC°xXí“P…®3·Â~B ãjaåNxÑyìæ‘P/Gp3adU0³Ád$/‘Sü ï `R³& +¯-9zcÄE¯Ì‰ðx°ÈU=)Jéàn+jáìizn<™p•x}Þ¯ +À°3Z‹,K×â yHrÚ"Àˆ+ì]2ƒÏŒ ¢‹ÛÍ‚À†e’SxþRS" J_f„\\ÉHà9‹‰ œFƒ©pîÜ‘åj¢ µk%rFÅ%RÚðã´GM'éÑBq9^û6xFAa<`䮹t¼üJ€,FÁ[Y¥2EÎ3ð"çQ\ýš 71ð"7é0œA¤‚±dw€Àܰ,—.‰.ð"g)0ùìiD/Gx*ŽýX”2Yr][)Ñ‘‚R›%úQÐ(3^Æ‹ÜB÷€Ñ]ÄgðKÆ‹\‰ÈÝ Éx‘!ÍQ¼—ÝKé!¾{/wp££XY"Ïí@Â1¢Ÿ¾–4åùB-L‘Š.˜ ÿûܦ„p 8¤ÂùbQkƒåûÜ%»$#C«\07/§D>PÞ“}lŸèê\ËÆm'Ý 8nXöâØËɸv…âr¼EI!•_„Í>�­:vØ”Ív•R&{œ ‹Ó?ò6x„„–¼[”2ù£˜Ôì[±—ÃçDQHÈ™å(TBºƒ¹®â4ø†e[;x‘{(ŒD.;x‘Ëï¼ÈeËäKÎíÃî2 ß‚‡`1X&_XvI/äï-x‘ã艴¼È}-³s/r®‚× +^ä &‘Ë +^ô¼Èy%‚¹YnET8³'ð‡‘—//‡]RP(3¢ÐÉé/r¹ƒZ8WÆë3ªÂŒÊèÄž¬l {ò4ÙäVnR§ÎQu,é¸X {’àEnÒ'ÍxI™Ì-J™¼Xˆ àE.ÔXNÚCð"§+““&9 +È8i ‚¹ŽS™´F“y ¯Mbr/rÜcÉh V=/¿ `‡ Y”2™k‘;"i r§ÁƒóA‹àQ -…Á ´…àÓ@¬4[±Òh4±ù°À”‹Š¹LãLFµ3ªŒªô°K[?ìÒF‰È}><¶¹]³Ñ1+féè£Ê».—üõz•Èë•t*ŽÍØ(è$&#ñ|8ņS x&ƒÉ°MÓ4ÎËï m=Ɔ1¢É•?‹¯m½ –µP %DM˜8\ŽM—XÕÑaTá0ê»åa,¾])½Þ„¡Åˆ3¡G]-ài¢N$Ýø¤Ð¬!Ð…Q_|Aµ¸IWz½ ÅÀ§lEß4ünXÖ`ü ïJ)It'.qXI +Ibô ÎO0I<ðq’8B$„v’PI\'ýPõNö+ÃYÒc+,¯€…U¦°«Q5’Ë&c Ñ ¸Ù^WB¸©ôº2•G¢‘h›0]™u¢—$q僒ÊýAI=(©×CűK‘("yP²×E4p +Ê®Q¨¡me|ÐpvŽTæ  òµ#FLj.Y° +Š´ o?˜Ft>¢×¥”É%)U³GJURªæ‚Åòº|ŸÁ_ÚBÐ"ØŸÁ +´… E (Ж—ë38L -ÏW°Ã^Áâh!IBÁcJZ  ’ MÂIb2<ÄêóT:žV³o¿8( +½aÙÀÁˆ gü¥<(Mš%š|<†¢ƒì ‚I¨—G"ØÔÁ4#r]™Ê]™Ê]™J¬Dä†e#æ‹“‘ˆÜÑ$TqìïAI½$ ‚~IJ*Ç ÇîɃ2Qh©Þ°¬ã(R G‘j¯Ð \A±Q¤šÃ(RíD8R®&$ +‰B"MéËG*G"©AáT{s,XÍÎõƈ#zò‰ÀÑ1¢9 V³rC<„‰\ÊÑ?Fôn r™ J%ˆ Na"á"H)“KMJÕÜê`ZŒøµ¥L.a—t,J™ì(pÀ.Ù7…'(–¤²ð¤@ƒ,œô¤®HbYxÜ¡X8ñüE -n#rŸÁ9 ! ×m!h)( Î ZÑ€9Í^X†œÛ¦ªR×�î +ÖÔ×aõUiª*u©qª©RX…e¯Ê®é›°@Û ?°ƒV]éêC„> –ÁX¶3÷ßýæ_Ïÿÿ†û»ÎÞƒúëü¿ß»­ùïýþÝwÿîÝ×öÖþï>gÿ…:ç°û4Í¿þ›ëzžs·5Ÿ?Ï»Þ;Ì;ûÎk!¨µ÷|‡ýsßm~ÿï¬óçÔüËùãºûîõöþÏ9Ï_yÎ[o0Ô›÷†9‡Ûw]Û›çЇü˹gßqíËÛûοÿõîàïß÷{ç50¿ÏýÖ »ï¶¶{æ}ƒ`øõ»ËJMkýwÖ_×_ö:wî;¯}ýûÂ/çœyÖݽ5÷:0ì¾ðóÌüw»ößþ9üÿ ‚™ïÌ9÷;ûîk:ÿðÿä\ûþûßæ;gÿ¿œu~>ÌùûtÈuÎ>kêœq´®  }Zçßu·³Ö7ç_Î 9ÿ¾î;ôþëï÷ÿ»{~ºwYëžë°÷ïó¯µC,{E°Lµ\jüóØù—óç^ïŽká÷õïã|£…?üÚóÎ{ðÿŸÁNëNkê/ì²ÖxÈÁ¯{¿ý…¿ËË6úƒXÖú>ôÙóæŽoÿÞÝ×vèÿæ]Öôà&ü<ÌDzÒsöÝi­…‡ZwZküço¼Ëúë`×:‡Öa{w÷µ0Ôû÷ž¿ÿý×<ƒyosÞÝÖº‡ûÓaÿYïOzƒeå¿Þìø?ïü}ìöæÿ?Ý}šï{Ïû÷sæÝƲ–æ·Áì}רùýå‚< 3ϺÛì²–áQ±l�‘–±Œ´a™@üޤLÒ(š©m8"ïÏQËXÖn4H±«¥jîËL-kÙkYó~káÖÚõ«nPíIÚÄ�Œ ¿=ìÍ—ÑL6Á{‚b¸ ¦Sl ,ë3x¹ ·‘hÔé±ëb’5ÞC½è�óÅ®ô^žd$ïeŽaâIX°š¤TÍé©ýÑ’Oű#ê—[NÃk ²G`ä|Yøésð"ç9 AaRƒÿSB9ŠI!4ûŸP:½ü¸hŒÎ±—O¢ØË.\„,y€~«2yP¿+‚S"ñÄÃ6qËôÀÊ ,ËËK²(erGñÔäewk¾¸LšÁäeˆf“E&Ï™$&/§=]XH‚¼ŒJP~„�R¶ŠTÿ ‚ÑÏähU”Æ@ꙓ…ÒfÄq†Ž§A/KüÑÞAÇËáfÃ=4UV/‚v¼Lâ›/“ 2ŅуS÷€á RÅ£ VÆ$§**‰îP$1må£@uyHe‡ +;lÇÅ;dá“ì°'©—%¨ iOX¢V=h¸x/‡rƒI_¦ˆÄYÌ~JLB¯üN–u•Éi2NZ¢]§2m& êâ¾aYF{â»=½ù2d¼ #ÓQ\˜IWa´×%݆{€0:¢Ø`4Ë„DÁ_†Èâ#3¬5Œ‰æ¯¢’hðA¢5ËÀ Rn#ÑÜVJt$þm–è ËV‰Î—Jå®o6,{¨–%ZNi²Ä…H×.0Y8׬Þ;ЉÉê qõ£J«k ²ÆˆPÍñH“An‰ÅÇGÿ±9“ˆ‹‰tàG\ž&ðö'cÃ23{—P©pŠ-Ø»0p¥Â ¯Ô—‰°â™±ãò$p(Œzä–AØè£ËèŒétÚÉÇÛœ#ÿœ¢uŒR”¨‡Çî(T´>77ŒH7,Û°lòü7¼»ˆ8’Äù’$D+Ib!4 ƒîÄ% \âõð& —@˜œ¸D'4 ˆ“ÀÇIÂkY‰†Ê9ÎP·›Ð:-8£f²z<°±ÒšÍP7Ì’ \2ßÀȉEN5º1dî rîãã9L%ÐEd0v ŽP鈱ôØ +˜Ñ¾¢ µ´íÑ¢ 8^C…äd‚“rEV­9 #i;EÕ@U_ÔEµ ,“h9ïPëb�\®”É„ñr>ÀxFFx‘ó]…уÂ@ Œ¨ n6Ü9¥KGå|h´U°$Ë;LJÑË."Õ\9.þ )ð"ç­]6\R P*€5¿!‰È-ôM*O.>âAIå"ÕÐ{ÙU#Z{/¿`)“‘ë$!Ž@‘j mjéIO#r ÃçŠ=o;ì͆»Âeb: žñ¤`MÔ!¡<[!î°¦fƒ{ï Ýàžƒªym¼Ñ( +%S‡@ ”öÂJ)y^¤¼aI»[ð"×]H^Á‹œWís“Rȹ^Äš'SkÌÝ)x‘ë*sKX¨d—6Ã(ñY€ìÊ :Hü^7�/<½/v ”²¼ÈqÖ‡ãqèH3,œ2§ŒàEn—ßI#x‘1Að"7Ñ.“æÒíÁ¤ ¼Èù1¢óÆÛ`¼ü‚*Žý€b +Æ Ë¸ BÁlÄ7Çv\(§ŽP(*;<ºHºBÞàu]™’H:‚Շ#ã-J™ 7LH~Tqì†#Õá%î2¨®Le ä@’Èt'.±0 '‰…O0I¬<BD"–E"ðFh0 H¤"jp€@Fvdú˜™üxp¸ÇiYËèÁá<‡ÇƒÓðà(ë3¸ƒÃ9–!¨¶ƒspÒ¯Í:�9BÑ9d + d"öXÒÇáÂ%¢†—€â`Óë¥ÄÀÆ/î6‰Ü^üÜ/LW¤ºaD¾§ç&D–)Ô/€XOKÀí¤…KDSPÞ;lNÁŠD¤^†°D^ΪŒ~¨ Ù‚l õ2Ë­ˆ w}cÔ[£J"A°‰ˆŽéµ•8¯/bÑM åÞ°,£P0ð¾¥Ú8¡ÎO…Û~³=’®KÎoX¶aY‘:T);¢–EBGþ¾ ú�J"Ë·aÙ§‘À Ðò°×ElX¦:€«2V:‘[á[¸Õç©@kùp€/ÅGEÝ’€¾®¶µuF®á\¢_Õ¤7,C%pÄ|‰‘—¨Ëñ} }Wçòˆ|–âoX¶aÙ†e˜ˆ%ôöŽ”ˆª—@fAàP¢<ŒŠ~ñÑü¡&Åt”O]0;ÏŒ–Ø»l>¤ÂùÑ/Ù¯ðü ƒI|™ñò}™ñs:” Ë@ÕgC°Ò\aãˆã%NÊ¥Ìss0‰ÏH@6ÌÝ�µš ¯îAŽH½ì‘ô ËÊ„‘d–œÒqR. Ɔe–mXÆÏˆÅ CÚ"p`rxOWBꢰJ_fµžÊeêêþ,”¼Å ºýâLÖ弸/±èŒ|Ì—Œ~µ>È–ŒP—ø."ñ~ßÔÃÅ>D–1\ªHbÃ26œ´G¼=ʆe–!P,–}ΆIb“Èk´ÇËïqѼEZpF×càÅ«ñ¤ß‡«sÙT¶¿„H› +÷•<éTJO“YrÊÂÕH™–!lXFnX–‘¸ÛÊy¡KÉ‹h/¬³”ž–ƒ“¹[ŽGoƽDˆ¡ËÛ@×ròKÚpjȨâe®Ò1ïÈ[Ž7,3µ•Tù–�›‹ùšÊ1üS9:Ò +E*Кaº¦‘á¶œ–…/÷a¾ú‰¿Ã„,Ï…5ßa/R“À™:Zç3:x¹.Óý@ú MÉ€6Í•2Ë*PAØiåÜÌjÔ"Ò™ŒŒ)Å8·1q¤�û¥]wÆG»˜v´ÙTÚªêW†N¤KpV«ÃÊznC;5a7‘<¿®ÐsfØuzùí.H;¤únwów ÁÉö î3V•ŒÐn¨ÿEñõ VÐNåOó¸ ϳò¹k–qV#Áœ™ûøñ,·5#3P9lŠËC¦$ ŲÌâBsbw|ªÐ—{KïvÞ¸0~ïJìш”·ƒÜÿXËóª˜ÀŠáfJ1ÈÚô–HJ´í_^só&Vk®DOüGJ]áÝT!8CçKž>~yÅþR“ظ¼Ÿ`zÈí³Å¥™ÿ¬ü¹/ÓIwN÷®¼¢þÚ€*b2H^Ø.´\sLÄy˜ó‘E³-þ0Çߺ-ØÙßߺþ)4ׯÙ'µFåøÖÞϹFâs-±Bq®7E{>XõyÇç# ªçÑoþ’ãf&òð9ÿjÇv þ™ÿJZ<øfä[Ý•‰ Úìõ>w…‹6(£ï4sÉLêtl8Ⱥ7æX[(å×÷DF»(”%lŠtéWgП=áçåÕÈ%Š+¤¼3I&Ï=ÐGMÍÜ<ú*wuÚZªö€ö™¦–"áÎÆÎ«yDqá&í.OæF¾¤Ù QGú·(Óåf‚x©ø.í|US0ùèDÎÇÿ¶ìb©LÉ]!eIQ?i G›@1"ó€™0Ãç-Ò@(WQwVFQþÂÍ7‚ yŒãò„D|6¼$°Iæóê5*„T/éQˆbŠŸiÒm˜_OLAÑ¥Ê{´û®Ø†6Ë@ Y*Ø %ÈÛZ £ŽNØJ•îAð«¶QÊ5YZ²‡ÇT8»Kd|ÛýÔã26A€#/›W=Úü !7C1³u¡)òKZÉÜàÎ̽”tLYC¤‚5 O8þ'Ñ›CÝ^Ît0c!0^â”9~¨Ïh_ëþlà’ Ä" Ó|¶ý½B|G8×—˜ôB4ñ…Ç4é¨t,€"C†6.þJˆÀ/+„j*õ£ ¦1=5ˆ`rèÍ8Çxd +ª‡à-ÜËvQ[•3Øõ;hV® +GŧÖóÖ|viMK.N‹¼‚pŠ3«§ÊQÁ¦H’Üð"]‘¼âh•A]6u8OM[K(U“ОFÒÁ·qj•c„\£štà ‰ñ¡¡á"ØÌl™<}Ž_vÇtWjéÜ_Tz»W'|ÎTBäõqñ\æ=ª¨VÏýäôGq€?b#ž\¯*è&ƒI¢=:ŸO-çS²Oî?NÒýIÄÄëá¶½\2••dÈX)Òø,(qÏ×eáÆG$š¨Â=è¨6Ç'´CÃüäU~곸ÆîQ + Á`ˆÀ@6=ø© +Fôp( ë—ö$ J‹0ž"Ö/Tü«%–«[²½VÉ}Køëob'*ií£%Cœ^vnµdŒ-º[2I•¸æžXMÓÒµ¦‰°'þ&C ‰E®Q’Þ´½BÝ2ð bžÁѶÕÓàÈ þ‡øïq§±X€UÜÆ¹>Mã\û•ì’41í’ªV^ù D. ÄÍéZ°‚�-hÝòJ¤'6ÈÀn%”fïûà²*Sl³áˆAkTýÓ¯å ƒvέ&upib UqIÄkGŸh䣔º Ý7\8&/Öå’̶•aŽ5˜™¨Kõz ÇòÙÞÊFšÜTåšLÏ_¤Š2ÆKÌïJ^5„ô䎹·5 +b`¸Ý3_ÓËs4Պ݃ü?q!q*P>.Q¢ÛÍ#ºtc)'$‘GÙçû^ùœí +›ËIíéõÓB8}¾®¬Ãì+?ùR=Ó7èU=^ Oé&͇kÜ$¤ôÀ +í4ZQ»ÇÆ‘"W«÷ÞæÖy[#¸”pÎRc +™æ“Ë•Ë #+âéªF9G õ·åBùü-Ð{~üb”¦>(:¦Üæ’V†Ϧ½Fç6$q|.! y^5ƒÝiI. ‘Ø#”ÜpʨºãRÔäDm]1'¯}®Xµ½y½ƒá/ì†Ê¢A] õ¬}JEý• YÁxņÕ/zZŠ Å\¡ÊÓ•Šª Ô÷b`c¦eBuüŸ˜§ dì$5Õ¡IxÁzD=9 ®K„ö—š¹È-uÒ“>þÌñ†hÑ- pðjó¹ºËL˜ˆˆ�Àâ3þ©¼!åÂÇ÷Žj`“` +YxômôÔõ"1DShi 쉂|ìp:ÞàöéWcŸ„¢ èû¸PŠ*™äTÔ1ÿ$ˆ6&Sº‹¿•ñôÔàw"3ÝŠZ8F¯øÄ_“ZôNøB'‹JÏà(ôà ÈE½œ´(9o¿v?©ˆ‹øÅ Ö É”0øÊÔc~&êܘ;½˜d„8ÏN§a?$pŒ[ÖXí˜:Ca¾W$ô˜Žv]êŽ? ˜*aÊN©ôõÃÓÚËøÚ®ªÅµÐœ`YÌI¥Ù  ”ùÙ.×” òÈQ†®¦©‰ÀÒ!ˆIðj¶àü|"Ý» i2Š�”`CxW~\šHÚ°À!.®¼‡£5ÔòÝ×é(“R'I Î¥A/›¥TWÂyÞÇK¢Ð—O +¤9µ·;´#Tná$DZ±IŸŒ ”\Ú0-7‘?TÜ¡u6‘Ï¥z:áÊ[±9ÉÛ…æÚˆÐ¦/ㄨR +iî_ÎÜhRjh~ Da2ºØ¦_Dm÷ÖùÂáº"SúyMHÁ\S4;Q(®çν©íýPbœ¬ ×Þ@:tzšhñèRŸ}¸ñ–ÛÂà�DOðÒиH�­÷Å?2@v[ªÄŸ¿rÿ«ý·1ßöyOõ­ü¡ÝßÑ ðåú‚°÷_õ}­@Ôèz¨)û˸@c5Ô)Þ‹„La ì` ÉAjXÁ:ò4²#­’²/Ž^?ƒßñ!uAÚBæõ±ÃYöŽ›ñ2å„Âf Oˆý9J-íéþ)mÝ0†­+íÕfÕ WC2žþS ŽªþM€¨ù©úƒ|nü`ý‡ú>ä;›K[/H)Üp~ŠŽ»ÿ>©dÅÌaß…r-Žô˜°&°ñêØ°’h2vÙ\J>€Ñ¿ƒ>=QÂÙŸ¯/]ùû4‹Û£üÏË¡¥3…ÉDiç™$éþz}hy@ÏB¬ôwpÛKÄlòµ„B´°k‘ßæöÑv T¥UM¯Ñn^KA.èØÆ ][L¸×$hÑ(€µˆ´Ïh½–xT‘ú>þ±×dh+ µëÃE•¨$ªŒ@,ùBº=ÕÉDíýG©K‹L—ò5ÜV£¾Œ6˜Šÿ;K®AȽ[r•*ýK4“Š P<(‘=6Ï$ñ©§_ \=“c€ì1&WýsÒþçÎÝ<&°²¤ØÝò¯-†n™Ï¹ ø£Â¾8Är—ÿò¢ÉG´‡ÛXPGçSh¹Au™¥ !õ=uÌ „ÙŒ¸¾_ïñ=¨ÕAå<ŸÒÃòÛ» òHXk{ÉéRiA^Ö›ïä’Ç;#ª8¸Ò­u:6~ŸkóÜÝ`+€,N½%žTpçbJª8šš@Y`"@B퀃¶nŠ„Yiò÷¸u™ÊÞh-…ܦ¡*ê9ƒ(VX +ÚŒõª…ÃFþ~¶¹¸Ùc¿â¼äjü€6/CäÈ? ƒ:ëõä&³ä€æÍ_¡×çÝ +.ÿ!ÊG¸HQzða¯M=«O]ë=zN5mú ++žåµÂïD¨Ÿ1ŤfÌi˜®nnmÿO]8%'˜’M‡î ¼¹Í9ÇΘ£Ã|¶$~‘Õ£ÌKÝÖÐ_Ÿ½és-²“»�Òµ¥1{Â�ă=öÛëÈ·ZË‚BÄÃ.X<]ÿ;›­Ñ•)8ëQ&²œ‘£Ñ ýl Àíi?}É¢øJ7wö–·ùI,m9Ÿ¼_çI"]Ù)æÌ;WŠÃãEóÛ Óy¼ûÑ8AÛ@”ÎvœT™Í+|ÿà­£FΤ®¢… ~LŸ®¿OZ&íº§÷Z˜ höÁã~²¤í¡ &éÏ{?“—»Õ§,‹ê·[­Ê…rø{_A•±J¯¡lÞÝ1»Ìv)Z?Rk¯ ÃÉoµ]q'FÄ8F1Iýg+°ÓfÅ|ìunÈvÔÐTÂ.C&ÕÙ±;ßÎKCΉð°üO*‰T›YyRŠëJäãfÌ6VøÙŠúúó¨ÜA † +‡|ç;¸«I9TXzŒr1ë]lsèP1'ŒL©¢MP}ëÜý¨ªØ¢"¡ªcv]Ø Yµ?¿  Ñ‘'•Âg‰ ÿʪß9nFWþ¶°•ÿüóûðŒmb ùAj_WûyÕs�¶|3gTSY[øÚ´âÏŒª}éÍZžÓ#8@7L:2Óhád¾3è6~½k˧HÁ¾Õi’ ^E«ÜÙxÓÕôNñ'ÈÀÅJ¿gv´Èúîìë‡zãÎN]Âôskûú«Ê'©BÖqi“pΫ™tAGù,3¥üä«'¡J&x"VÇtïæßFÅM\íûÃúbèB>¦—Ø8âŒúOCŽÇ+ª²ûUôWHâc’Ü‘ÑRz¡w…j‘Ÿ6ŠÀaÝ7›N£ŽÕNæXл€l¼t*~zÝG7#óÑ áŸôëÁs4äLÕG“Þ=÷í¨h'ãÁT¼øù╉¸9’œ”›+V“æŠx6Kcè{IÅ—(½—•õŽÚX9!¢ÓmJ»v³.ä½2J×…úM7Ñ¢„…‡V…­¦-5pë'RXÿ |'Ó¿±Ù ”#¯UÃH­ôÄ¿81!¿¤œêüÁ +Ì8ùƒO”¬ÍÖYÓ'sIµKvÂiÖ?‡æKÊ—uP10#ÂÉ’—”;÷Yx>m –ß%kíg'pâU‰¼|I)µ0u«‘çHi§LhÖ¨PÀ;'´6£©ºƒzWC}ª…ŠÃ½5šõ‘]~f€xÄ¢&DéîÛÒ8ÉCG „>¸4f•Á­QÇZ#Eb ++�ž©|rŽÅ*#vÿÁ{\w9™º  숑#Ç X¨U‘õšÇ¿SØåê&ü™òû’À+™ ♈„½B8”{&çú8RLÊÛEÏKȬÉ,»hQ +�ɱ‚&EK ¤@B]»Ú°ø˜¢­ÂËh}4)yljy\¡·´‡Ga³Ï°Ÿåï\7&ð é“~ÈðW0/ Ó;*Ÿ&…ëV(&E*~æ½ó±e<&%‘Eûï¿3¿MELE·"µÔ +et4øÇ G®ÙþSy= þºÍQèq¶Ò´´I¦9Çp Óà&XºD…Ceq(Y(Dãõé)úr´§©¬±A÷Š!.¡Q$¼Å43x¨"Ô'jž%,~O&2o¹Ë�– à +ž« ´ÚúB‡65#Æ1ê6Ú&7mð ~®|¤+ç\€1ÊΨ‹”fÎóa­aF€<Ãò²šS�ðΨÆþIÔ Ÿ4‹ØúÀl¸6Òû6¡z칕­ åØ)ðM(Sxˆ ÿ’;§RêÐBôsÚ–“É“Vž'JgÖ4Ç塨Áû;ÙÁ>Ùp*m 5?VÑ#* +5¾ÿÛ +¦ýBøl +y‰`»2¥G[Ñ{6 ªðï3VáUˆª’WÄ&Ȱ 1YÀoj•¶¦pyœ)0?lr%ZWbCÕA¹áob“ VêWþñ,f(`Í>¬Äuoâ4p{Nè?°Ú)WðcwµƒŽ±4¬_k{z:lš`í%ÒHÅ'ŸCӘꌫ ç7HPLpd“â ùBªžévÃ^qÃeùÄ3†;¨»è’®áîôF¢pS7§.’sIÝÛ�ÙAbŰÈKl¢râbãÚxLš—jü¶ýç&ãä†Ã¨ÏEþry!±_ÿ.­ îÜ? +ùaX•l²3ˆÃƒ6 +×2=.@­D3Š¥WlôðaE/‰Ú[.u‡³.éÍ;×/pÝÉÙåÉŒŒ¢—_"ó î_b×< i§yEkIb}îzŽNOÏBžÓàR|À‚«Ô©Dêrÿ¯\#làjš |äçyq¬Ps½E­wžÜÃ0‚zÈáQ¿W8`©ŒBIæ±à5£º¯ˆÂw~2DÌ0ÒôBASQã‰DJ®t¤,Ãì÷†=²D®” ռğ×Jà&¢g»blò~¤t!Fð¢qÈ×’!'«a’` +¥kQŸvBü.ÜÄG#©uvbY^(*9ÀòsOD9°!a)!îT’ëÆqªì€Ó†(G†DßòbäåÝÍQ61ÐQR„Øá+å÷4ô¶š6jB,pT(¢Zã}ˆÑ¬Æ;„XYÔÚ9ÿô!–2?± P6 ñ 1x%—U•!–’…ø› é÷H +ó7‚bœ½ûñ˜Á¤°¶=Äóü„š…bSà'jÔ“ârÉòU‚â÷)Ói +„¸¬õÌ…Oˆr=!–¡áâ!Þ¶h‰"!S=Ø?ÖlP82â§lõaȇ ÂÂSzî¾ÇâMC♲ 鋱»pg—B:�ÂL‘±›tsjvŸRB±]©…¡T ¸œŸÂLÕh`Aã¡Øk8(¾z7å›|s!LÊžÓs§Ì%îwĹo&Jð@4Y õ.°Ò]lÔ¸¿ÖPÈÎq.m-9¢ —ç„饇k; ÖʆW71&8:\¡XÇ˾ˆ‘ Š|(ÈmÁ¯Öï>¼ûd¤YûÓ¡a:eƒÿ¹tX¨°È•8E‹S,k®L÷ö)²Hr+°‰AòÓÅ38lQ|à S¢—چʂmØXÖ‡4â·uÄf‡Ì5Þ–”ë¨!qV R]–Ýrû×ZžLÁÀcs¯U]€3*»kÒ§ÃÔRÂ#À%éðìѺthtx Á¬Ä·\+÷;AÜ.…cþÄ!Õ¬-”h»f²\Z†)ñû +…¿«}\Nˆ“‘î6ž“×5ÅL0€Û§äü}-d$F“Ç3 ¸Aä“Éu¹n–lŽ»Æ–Ι_PùmQ¢RÌ­nðö +¢(C“{ím}óºuÖ[#Ø“ý>`n4Z(Ê‚³FïeøØPUÂ8y³¾Y‚“¼Þ¥ ïH F^|DºÉ•Å"9þGÛG4Àˆ6 ™+,ÜÆj5Ïð,UUe/’ˆÙëi¯M·‚í¼~4s´õÍ#}>LJ÷ù’�JS$û¼Šò,+ÍäÂÐZ~ƒÍ/hØ`@U®DÙÏBÄ\ÚFuã¡áêölÑÕ¾ÁþZjÛ¨¡ð5Æþ"� ê™ÞÌõ×ÂëÒ! u%¹¬ËL»Ó?‡F‡êáãšs€tÓä!œb Eå¶›•Í%P )õ]v[÷”È&CÈSk<ÇBÄÏÏ.Š,ªµ’â[îªâÖÓ¿•¸j­´¢;Ç«ÆJ*¸ýQM’9Z£ff jò7ï³gWFT~€=þPÆŠ¸Ý³é|¦%ÂAGˆY(ƒéç~…ߟ:öÛdú4n§X×\ÿT˘Mê÷r7áQäSs¶d3"ã +g©»Z&3p«<+€‘žÂ?ÝÐp:C-ˆÍCþ\�ÛRPA½"›ë)ë&Zªb=kù0)ìÔoJ?À}4‹L–=å\�7pl¨#ÑB9ƒËÀšaœeõ)€w`/ŽNñ)Þ•ÂxYp˜fã!š`^�{£žÒb±¢6ý½þe–,@EŠu…Œñ½€ŠÉ<?OÁIm™C”ø’kjU»[8 þõ9Æ[Ö O±  8Jl+R'Ðí·1]¥xCi1?.û–!ª&x9×ñR§ÝÂ’‚ôÉ{ÙÄ4àë²ÓÄãN«›CêW[± +—2ùÉCÆáý&@ù”Oísˆ/E¶HæiôŸk×(^RK�§l¾ÖBrò2‡glq©±ÚP}™¤rІfºh4ôPw‚µN÷>nÍŽ#¤©q~4AãéP˜~Q]gd îBæ4’A–!ç0ªGLh²Á‡`}ºëê¥çðÄ9Y×è@ˆ+®VíÔŽ·fc—gî\Æm½ÞŸê©Tˆ‰uþÈ⯠^!œ‚4oþê:Ãe|õ˜÷ÖÖ[Þ Ô‡€¢Œ‡)¯ÔËÐ?àpKSº0i³&oPšc#µlòj÷d– +¦t“©v71ZAá”lñ¯v܈j£!&£k˜GN“{ò¡ëúE¥½%+Ëo&*¦m¦ž{¬ºßÕ­ !}3íLºŒð�—÷¿Ó\CÕ Ê|" C*6¿D>¯AZ:±È„Ã8Ë,Õó¦2\B·ºÙˆ  9xíã¥ùìî\á°~öD}ÖSTm ~.i*Õ ¨j¯–:½™´Ã€ŸtÏí/PÎã³Çäw³hÃ¥¤Åí²¦€±G‡"ÕVÛ·úÈ õJÜ¿õ2œ mY=À*¢â×Ùç;E~I0¨ê S‰Fœ²‹µðÏHM,wÕôœ±´=±ù_Ç  ­ (É“ø‹s ZÕó½­üÉgQ¼¨þT•ã”y¦‘ìPÌ~Ò×|ŸÖÝ ^¾[ %Þø!•Z#}eBÝliBS<] +(¨ÏL¤o+~ ýÏ÷ïsßI\-|³Sùù¡83¡`# +¸¿á1µ¼Ô¢ösôm$·O&É4ª¨-AÖ]ÇYƒÞ4hœ ö¢#áž“a@¡ì¶Mþuÿ`•J]Övjá’µ^á|D?à[yr"rZ¾/÷F2a¹”ð6 9&?N>9 —3Ôë¢1- .œ¬2tõ¦œQû�ý]†jÀ- &;,Ÿ÷ *iJ!4ÙK  ªû©<{Þ“Áã$2f°'4Ö ½ ×êmÛçÞƒk_š„±¡›> ¸àspúqhÁž/váX]@YM\É.ï†UÅf\¦´"˜Å&ãàJŽíÊÞ�|î7ÅJr2\ãQ+%˜b(‘TïœYß“ø.pC +ïþª[ +ï-#N©>5Žl`:tâHä§Ä•ºÎ0Ö(ý4ª„%¿cÇ5––¨)•AXB ÷ÔJæß#¢–X"aQá3µO‰ÔÞöŠ©QèâIënåõæ|‡–´z›…Z{:á…PÌò¡M,WD1h^4Õ` =Wõ;á,ñðõÕDFç¡rxu}N¾S×Ñž¯ ßõµm%V>yM}{¬ýL\_¸95w}SÆX7?'꫱¯o‰Ôi.Õ\ßz÷^&g|iPàªï*yþ3C}v1p}‡Ï ‹°9ÑÄ_ÓÎ…:ú_/\ó ²µ¦YƒË‡?\#ð¥à¨ùp6!V5‰ ‘/L^s%“ÜÁ'¸(Ÿýƒ£›ž† +HŒëR;�Þ +¥Ö3’‹Yª'8ºº6ˆ_Éá¸c"èw¯ÍÓ+êßL° Å%׺ŒûÚLÛݹ(¼ˆÆ™–ða8{™ÿ¢.oŸ3µ¬î%:,”j߯ó…_ÁŒ»R!ÀÖe]Åü¸½F™* BÁ#haQO†•­Ø6hèäã`„<ÝÜOŲ¸¨o~¿Ý‘í_øJg™àѯ «ÊFd+‰ÁXÐ4ê{'xÇ;§Raû¢Þb5[…ÿ7׈VÚ„¡ø™Üæ³§ZÉÅuïå.œÛº2ø»-"2¬ÒÌA HÈRÅ.7�>oH®‡R6¿œ°ºBɪ÷« | oINõ¬ôSHýÝD³j«qªºˆkáÕ7šåÃh/M@Æ™ÇÐÍȈú<Äx­,+dáÊçmýÆŒùÔ€"ªõÕ¢YÉËÞ‹i 0.‹ùK¹‹¯µ˜+d^¯ÂE‹÷áÇöFa”Ì&!µ¹MNô27t'}¶!?ɆýÐKȳéµ6ƺ·É‰I›+©ÐáÃx†ZßÉ“É|J‘éP»u$iZw¬ ÕŸáÚx‡ )÷Ú:(†a;#¨pbr‘d¼W‘™Ë á³ò÷êR Å- h–6ož&‘é>mQ‰‰¯ Ù +le‡á%áXbI�|ý|ˆãêìmQj¶ˆbC³ÍòpOy¡ë×>‚¹&C?Àrj`·Š-°€GìÞÆB$@æÖ¼àÒ° ›c±cºߤѣ|&¤Õ.<Éå ÞeìÞ!9ä nwGLæ@VƒE’›æ7ñ*on¸f5èVÓY¬/ÐD£én>ßioíA6b‹ÆòU˜'oðÑiN)Š\ƧyÔô¸ðLËÄ×]õväu 1Œ”œÓAQ‘=¯×=ÁPI‰%vÀS[%1L+}òºÇ8ÓYiërԃߺ^Æow Ê_ΕîP‘£¯¤E.‘kŸüœQÖo¬®7¤L’¨T…ºÛ7Tö$Y~ À¦\£]weæ˜ÚvâPΕÀ[vn°…BØ¢9MûÿÈÿ}:%«(÷!ÿ–ø ÃŽK ë—·Î†V—,“TѰ5†è‡`1<ûvFÇq4†húGõb2A†©Úç8´•ž(‹@Ôì|9ìÐRo©5cAjç™cÒK­WaŸ…9®ò¨û¡bÙiA€¨L m‘M'èIxý¬Ñlº÷[Œ¨wám)O:…vôoéµÛ–ÉÓÀã Æª&o•c|UNý9ƒÏ¡ Ã¥j°4 ¨^{øNÞ•ìâXÃð¹7 VI᪖lz—djÈkE0‚gfÇ!¿Æ‰(z=‹ +MNÓcyÕÉïØL ßxëÇì0˜Õ¹]¼Mát¢|.Ø÷_{–½M‚ÀVJåÂüÿ9¢ãôäAî':2‘nr&8 2éÈÓ„LvÙHHG‚L[cá¡òÉYL;µäŒ4ƒ óu'hB ùC,ÐqÍë 7C"ßMÒÈu×q¹îhfØKß#Åp¹]“þ)ïpˆÄvû’µwù ‰£h2*°ýjõâã«Ìɰ–)™ù¯çý§’`tÍ\Il%Þ@¹’Žù7Æ´É÷å ª¶Û„Ÿ®9@|ïyà§6^ªÀÝýx ’Û;)ÑÔE>ëxC%ä Y­®ýÀ=¢k�jfGªºôFŠ�!¡"\OÖ±¬Ü9Ÿf:”¹y­÷ªTqh7/:ËHvãI¤}²RZÝ—¦[›Ð/ÎÔUºN)UÈÆnO@'›`ž(ÖÝ gvG¡. RU8¥m_þÎþ&p8äŽ+)qp'¿átK™J;ºY—c]aóÏk}_@xÔÝ,T;›P#ŽÜÀ¢èåÒó_ ÐÇqHk§éΘpñ€…H¬ÕuüìF>³@Ƀžq¸vÒPê³¹©æ¨íÇzú5ǯriÊ΂™‰o$µ„ïŒ;5ÅR‹W¢^gþY0–ù8>Dà~ Á(Ãñ ‚àØ�Q…ê×ø ¥.]ízV—«ôë‘Pû€«$7ÒâÙéDúÍn8@+ ž„·‹:=ÑltÌ©aí>0©l³· “Q‹cE¸v¢×®6FàðôÔ ä+¢‚&×dÙ0‚‚)#ÈêЧ +aõêF 嘲Çfr;¥D¥T4ôñg«mI¤H “:ý›Ï½ÿ9õEoÈS"ŠØêy­ ² ´WCÖŽ¢ï-[¡Ht¶.|dé∦Áq¡0%p]±#¿ú ~´Ì•6 4± +@¸£ +1a–½c,ú@ÌÆ=`ÝGb·L6b~§¿z+|  LDíwZ>P|uÉÌ„@#™Òm¯<"9ž+øë{ü%©xæI’ã*2ôb ]n N¨/K©Èƒ@¡ù\€Û{ðPå¢=aŽí�-èí6Ç(‘ZkÐM(CÃàîÎ]O‚‹jW7Æb)Ê +ÙꥯoÈH½)ZéÀ¾iM‚†8 ˜¸N¡Q‹…RÃ_|J€°7k” ÇO'x/‚iøÈ‚šÐ0޾vJ€1šcrÒX—ä´šÅPE’pº‹Ô%~U@ôx+nÒzk%Ý×n®™¶˜ÆVŒï �À»f²O}Ò,½Ï~wˆÂ-RŽMm2äÉpì÷»ÈЧŽñpÄ?*.>µdï^:=â 2UÇèô'õÁ)¢Uœö‰ë55Å1öÞì|Y‡ÊÇ-„cx”VŠGƒfº?Vß­ÏpbßPaBà“œÙmà=[Yj‡¬DAúB(ô³´ôÉ='™fýu*£Ôˆ‚ˆ¯$¡¶Ã%ÆÐØlž§ \ž¹¥3ÍqÆWŸËP¹ä_Ý4½He:y3v³±*z{­-?<:_ÅŠ""ê²DÏ}§ìû5Oáé¨s +'^AÍ4xÿ­kÉ€<©¨T[ŠgüHX�2l]‚̨©iÌhï +„VÞXm…’­ ª«°º×{=ë›Úá^­5ôúPà”b‹ßޱágtÁˆø†TIúª™8¦üðØ 1 …P§ò»=D—²íÓ5=1«¥aÙ^„B¡d"Rbq²ÍÌøô‘†ßÌ9bõÀ…¡ŸÎ·(йcŸ00yá�š1FßMwìÝ»©C*<™ñÂêW*|ïy†k»×Ë{hZƒLÆí/c )'E~)ÿÛ®£¿8S¤V(âÊþÀµ‡6(Tt¢_üØ|%É‚º´5×@Åð>Ê„R;!6ÉÍ¥§†÷-îÓ¯:ÙfU2œüÐÓæ4Ï+¸ëÊ4‘ÙXFÖsÙfÇé?AðŠÈìŇP%2¥ +Y>j̄&¢FߖȺ#^ta°.m¯¦Yà4/º[XêZÝðïqyºiH RꔎæÒ¨ü•.(T$¦Â¤€²’œ&;êËÛ´Ÿ&Ж ´­ƒù¨%›þŽ ÏUXž Rú|lì£YAœ×\áŠ~LîúƽkžbÛæK¾F¥ä ÿŒ„ +Ö$@.‘¼7•óôÖ—9&œÊ�,ÆXÙÎÒU8%çºÔÙôLI¦`Ý.‹`§µu 7²–[Öû§Á¸ò«jÁ¸ Çç?YŠL œxÕîC_ ÊW„¨`¦Ä`eÞÕ(A¿Û*ŽÃ³y²!DÈQ`œ‰xòƒ?ð´‘pç¢1Pg'Û±êdŒ¥.ûÓÜWr‚ý5EÓYM¢’øPö'Ê`¯*v7\Lƒ<ŸóDnŒ 誔÷•SIx?yp7†[“ˆ˜ÞɘQü@ý–mLø9S +··jþ†ºûY€¤æD; ˆBʶ1jòË©ª'·ª‹)4Ouì\™Èc“‘¯·�@Ò9%(Õ¨ js/_s;¾ÊR­rë!¼ÌS>ê·ÜYæ.çÂÍ㎉ö¹{«?»Å&×ÎÊDŸ@Å!Ð¹ŽøGºØcŽç•H5ÛEŠŽ¾Å„}ÐÈ›¬zºÅCä +ëð {/2ÿœù\J@ÛvÎE“ÿ!¾–Êzò2#ÿ^½Ìºïä&òÕ OŽ…Ëørk›‘zÿj®‹ë¾\u'.¿žgkf ~Ÿ–ŸÍ]ÏX°—,³h˜®ÈdR?Ym”†‘¬ lfdÅ*›2JÖZf �NAØî€j;ªcMZDRêÊ4.ð<_­[6ÒÀÈ3î²ô®îœ˜Ð„¤M•ã[ŽoÒ³²ð•C™°ÒUóP§g­|1šŠˆ¾—ÖqEyÍsgU-²ûCˆ\ˆXÉQi“*m{F¦&¤ÑôÖ‹-^|‚L¥ÿÁ4ù'Rÿ)%Ïç*eÚµ|Fû^zÃ’Å_!jD>Š·™ã¶â•¸‹™¾ÊÊpïœ[h)5a€‘‡ŒfÜ?}[A-¸Ÿ•y`c¶Ü|[g˜ õä¦LÌ5¥é[wµ3iG]ïÐá¾`WJP)"ºã“IÆÛæ¡ÿ8ˆü¦DèSò6£”ήga»ÖÈÊoûç¤ç}‡áôh]5ë0Jw¿Úï¥õ  fŒÿʯ§¡¦«Õ§z OeV|ÊCZµìM¢?®ì¬jÁ`9ü¡. A‚ѱáÝuéYN¦rÌųðZÆ=SšªL á9ý80f­úô§hãÄ/òhÔS’ŽéÙœO³¯RÅuÔÃ*!GÊ—7-ÒX“SÏÖF&=@EïýÀ¡{½Î`Àƒ®›ÁËÂUn'[/Ì\^´¾ey6ŽѬ§ÐV)CHÖ½©!é_&ã›t`Öô‰HW˜çBöŸžy•jàïÆоnÝj†pžœÖ—`VÕå¥a–âKÕ•¿áe Çü¦î,À˜ðÑ–ñ�¼ôΫ[ßæ±�ØdßÕ„Ä /+§l8EK!fÊš]vãk›–†ÈƒÍ,-ßÌ£Á1«ÝvZ-'.Ñ„†?³t%·à`Ú¶rñÛt[Œ»p™ÈÛjuÊü*SÏÆ˜Öa&·@x8dU¼íÁ/¨É¸H0Õ Öڤώ™ì»î¢rìŽ$È3l&Ç� êà.Œ5ž•&BˆA×ÓÙ+ƒ”ϳ^6âiÄ'u—+Å´~¹ù¯ ŒÂ.¯ß¸h"‰ð”¶ß'>;ݤԼüZäÁ±'¢LIäCk«ï™Žäi¯|FÙB¦!!¸ð¨– ½‹“2N™‘t"â¸ã8ÞTO•uÿ¸'Yœ'@@ŸäíÝ#œµýyÌ Šä8¹…•"øòðº˜h} öÜËüô”qòeÌ J­ÔŠ:µ’?Ç…¥úÓ ùth:ì ÓÈËÐK…£.¿šB®ß™9ým­Vxf3G;FÎ~c”źþ[wæ"·?bfl@]&äE¨'oརöê6?å”—1èY)Q³ÖpØÃgYJ‰»b³ÉÒK�e|-¦œnmAÝÀQÓi•SªÜÚß"˜åi¨‡ñƈ>¹ïOnB 58Xç^,˜ÞI;ž”îO^W¨]ò�TF(!Ke‘–Å:»v§z“i‡XÛa”ˆêƒ•w’iŸ<‰°[6¹¾<ÂÞ³\mB8ÏB4‚L1Ÿ^$nº+�”‚윦`ïô¶>8˜ ~óGÀ Î2f˜|Qn·ÈâX6ŸûwB´ áÆ™¯Ð&¨×€Ïìàh› h| .Î×-Ò@ËS™ìÑí$o7do ÚKh(2ï|ž�„[vFåC‹�ÞÝl  êÛpÔ4]µ-©GÓÆ@sm0Ë óð,±×©—æ'LE¤­>þ"ÂÁùÀêàÊïDœ»¨…Øå<Ÿ×òü(XyÁi`0M¼üâsá]±LUœþ‘dígú™Ë¾1ZÔÔÑø¯qÛP+bîóúkŽ9.Œ~li;Yòå‘'Åðóµ mC$u1 îøZ3z!éah‚‡-RÚ~·ü}hzü“Ž%®{Gͤ= Òó²©ÇlMÊÙösç}&~Ó8"1e6${Ž; ‡)Xš#KBüg)P‘ k‰PaÌ,ÙÜÄú«~¥`½úyˆœ7e6M^8KsÅ�Bm£ŸZŒðÜ~ Yá¨ðÇ…/uê< ?ç³;e0² +`F;/µáôµÝ­é!K"š¨,G¨Œç$,+€òú9ôÇÚ‡é®H¯HËm%Ã[Z_Š[Ÿgó’†èö"nÙj ü±®ò¼ ÝOÜoóÌn,arž>#Üpé#ýn«SÙT,µ¥ÅÀåŸ,Ο6O.—NEÒfnMoÞœëÁ2ÚïW´Y‹’GÖ’é,-’AJp39–Á‹Í®NÍ…O3¿HMï r#Q Ü0kƒÙ}wÍCCéY†¡óíœÖ„¸`ӆЫ·G°r¦ö¡™„<—q³ÃÙGa%=_4kί6…"²ñ¶y5é±ûoŠ¿íÙoÓÛon ˆÄô£Qvøù®RÙ]ˆbp¶œJ"Ä\ÏD^Àt6¤Øí1%¾BÊJŽÚv×>ÂÃúŠâ8#tÁIÉ ž5îë[o ‹žº&§•+©7jõlŽ™ÃµVA ¹�½çÊ€½ÌüF$tæIc`[O)-¹ Öï9§w¤õÿÒ› j²©ÖäÞ¬ûêÚ0¬·Àƒ¤Æ< +O ºãJ%ç‘ÙúèUDèí8÷i£Ã®_L¸vzs§×¥Åè›—õ±bÍÙQsZÑb&Ìß5­(¢ÚND½‰ŠXA–ŸB8‰-;Ô™KŒm@æ& +µõH_Rœ(Ø›gÍÞÂ:zF4,t¥‰…ÕÈ›9懶 €:VÇVòKÏ 8nK”l1”Åï`ŠW†pºl´µ›®êì›Ù/Fi¦¿ÏÖµ²Ú‹ÈŸtÕŸ[~ÄÌ\ú'ƒúv¡õÛh äqá>–/=¶sLYUO6þЀË/ ßã×|·‹ý¸¡µY3jtÂlæñÐCIÄ{¿ kðUI%"Ù‡ÑUõlk§´ŒÓPZÿÞ¿Ž]åÞòÿ‰üÍ`)µM aš‘\/ð–VÖ÷Èí®;ÙóÆ—Ñ/óœÕž-‡¶Ùb§&Œ¶~˜Ë¢ðÃvð‰éëF + ¾9‚w*RêãLgžu0Â%À^§IùR‡ïåY×K'kÕõ!g\MõÙ}(óµ¾+±»úhï«k¢Ñ [.2¦æÿÙuK=¹Ò(Rl‰®¯n/&±¶' Q¦Ï#‰ ’wæcôîì/ßæwñÛ‹ÊìØ¥™ôãÓ=0 s­Ð"ýÕ‹Jß·¸]>^ü µD^ÈÞFX:\>Á­´°€¶c¤­OЋòÂúh¸MåmCßݱ€¬­›ñ—8šìP`KQ 9<Žô• ÂRˈ1YÇ”‡è5>€¾¥ëÃÔˆ§†ÀAÂÔôÊPgiäÃIW“¿YUQæZij´c^%Ò +/æ)œR·£ÊªÂëT{‰¶’‚†fH~´Ùˆ‰i¤VßHmO@žÀ‹Mδhâ7^mÊÉ;ÊÑË´}iY ~d±I•º¢Ôšô—$Ñ‚GrÜ1íºã?GwÍQt1‰ôâ´EWVû= áÖä™–˜¼ß ºò¤W&]уyiø]"Îa¥¾Ýö j=Dë¿YÅ$#qä½òîJúü1ÔX’X¥ìSAaTì&„3á°hE:Ú¨ŒDÕ´æå ´ÿà}˜|øÊ·N”°¤ùÍG©›ˆ˜$8F†áÔåY n£„»Ü/9èHqR}‚$¹¡l3²VÄÈ@ E‡“ÚV(:¡ÔôeˆÑm{o¨ ¶/æÑž¯ˆ¬|6šAá%<›Ø‘âŽ-‡AîˆóqQv“©6<ñdäÏÚâÁD…iŽØ¥Û‹1µ0Ö‹Ïâ1›änuJh]ͺ¶Ûg"`Ý[˜®·ÕÒ?öt›Òõ‚9JÄí�'›’PÉÚß{êö´=*‘2/Žz¨À<7¼<ùg‚æ;Æ?®©:Bó~!9Nâ¹ äŒ<õ çïû›ðƒ aú‰óþ…!žÉP<ãoDúr³Üì)?iF×åô1-Þÿ3I0DÓôÿ—m©Nà9²ßß2,xðz•~þÐÓvø›}c–»—þKšGv0c“‹-2‘pùB¡ú%î^Žî—uZžKŽË6î<àÕBÿz.5k¥{Չ鬓-´SÒÝÜ1¿‘ýë¯_ ?ä +ÂˆÈ âòÿQß© ¨, ˜×e²2Õç~c0úÎñõS®,­ˆêr³.hȱ/Üx5üs•Ziˆ6s#HåÐŽ?É»72sX¼å!GÉEL?C–å½w×Í®íY^k×¾·ÿ9Å®§­£fµ W0 ­›˜³ •<$|—eIÕÎ!ÉGô]§ˆTˆ{–Ë'•ꇹ,ŸŒá±CæÒœ“$ÉX�.Ií-j/¡ñê'ׯæ„ +¡×¤,ô+8moXVÐÿÿœôˆÜìø ÈBÄ͸·ÂGµE€3ÖÉ¢Ô0ã‹ +Ðîô²Öð4'˜kAØàó<]æÛ\ÙÇ=á×–\hÄ g4YMÆ<Ç«ø"lü¹4ÝŬgëæê° âüÿ}RãÊVþToßC×´œG ‰sŠÞ/o8²Œ‡IûOÉ(Ê’ŸäÇ ázö‹¼—û9×PÚÂ…4_K?S–Ç8¿¢‘fªQ{VUSz™ÓþJšw ]zvõÖ¨ðß[àÏ©›c¯CîôŠ^Pþ´vþQª§þ +endstream endobj 19 0 obj [18 0 R] endobj 37 0 obj <> endobj xref +0 38 +0000000004 65535 f +0000000016 00000 n +0000000147 00000 n +0000020374 00000 n +0000000000 00000 f +0000020425 00000 n +0000000000 00000 f +0000000000 00000 f +0000024054 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000024127 00000 n +0000024268 00000 n +0000025991 00000 n +0000000000 00000 f +0000023518 00000 n +0000053741 00000 n +0000020869 00000 n +0000021207 00000 n +0000023711 00000 n +0000023826 00000 n +0000023939 00000 n +0000023279 00000 n +0000021990 00000 n +0000022452 00000 n +0000022861 00000 n +0000021272 00000 n +0000021428 00000 n +0000021476 00000 n +0000023455 00000 n +0000023392 00000 n +0000023216 00000 n +0000023595 00000 n +0000023626 00000 n +0000053766 00000 n +trailer +<<878FE88CB9DEC14794440AC3A8F563F9>]>> +startxref +53952 +%%EOF diff --git a/src/iconsets/llagrima.svg b/src/iconsets/llagrima.svg new file mode 100644 index 000000000..e869ec836 --- /dev/null +++ b/src/iconsets/llagrima.svg @@ -0,0 +1,21 @@ + + + + + + + + + + From 45190a297ac4f6dc553efd246e3830c477a76f38 Mon Sep 17 00:00:00 2001 From: themacboy Date: Mon, 7 Nov 2022 20:33:31 +0100 Subject: [PATCH 63/73] The Opacities action has been moved up, above the toolbar --- dist/leaflet.distortableimage.js | 8292 +------------------------- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 46 +- 3 files changed, 46 insertions(+), 8294 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 34a01753a..a2edd45ba 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,8292 +1,2 @@ -/******/ (function() { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "./node_modules/ansi-html-community/index.js": -/*!***************************************************!*\ - !*** ./node_modules/ansi-html-community/index.js ***! - \***************************************************/ -/***/ (function(module) { - -"use strict"; - - -module.exports = ansiHTML - -// Reference to https://github.com/sindresorhus/ansi-regex -var _regANSI = /(?:(?:\u001b\[)|\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\u001b[A-M]/ - -var _defColors = { - reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR] - black: '000', - red: 'ff0000', - green: '209805', - yellow: 'e8bf03', - blue: '0000ff', - magenta: 'ff00ff', - cyan: '00ffee', - lightgrey: 'f0f0f0', - darkgrey: '888' -} -var _styles = { - 30: 'black', - 31: 'red', - 32: 'green', - 33: 'yellow', - 34: 'blue', - 35: 'magenta', - 36: 'cyan', - 37: 'lightgrey' -} -var _openTags = { - '1': 'font-weight:bold', // bold - '2': 'opacity:0.5', // dim - '3': '', // italic - '4': '', // underscore - '8': 'display:none', // hidden - '9': '' // delete -} -var _closeTags = { - '23': '', // reset italic - '24': '', // reset underscore - '29': '' // reset delete -} - -;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) { - _closeTags[n] = '' -}) - -/** - * Converts text with ANSI color codes to HTML markup. - * @param {String} text - * @returns {*} - */ -function ansiHTML (text) { - // Returns the text if the string has no ANSI escape code. - if (!_regANSI.test(text)) { - return text - } - - // Cache opened sequence. - var ansiCodes = [] - // Replace with markup. - var ret = text.replace(/\033\[(\d+)m/g, function (match, seq) { - var ot = _openTags[seq] - if (ot) { - // If current sequence has been opened, close it. - if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast - ansiCodes.pop() - return '' - } - // Open tag. - ansiCodes.push(seq) - return ot[0] === '<' ? ot : '' - } - - var ct = _closeTags[seq] - if (ct) { - // Pop sequence - ansiCodes.pop() - return ct - } - return '' - }) - - // Make sure tags are closed. - var l = ansiCodes.length - ;(l > 0) && (ret += Array(l + 1).join('')) - - return ret -} - -/** - * Customize colors. - * @param {Object} colors reference to _defColors - */ -ansiHTML.setColors = function (colors) { - if (typeof colors !== 'object') { - throw new Error('`colors` parameter must be an Object.') - } - - var _finalColors = {} - for (var key in _defColors) { - var hex = colors.hasOwnProperty(key) ? colors[key] : null - if (!hex) { - _finalColors[key] = _defColors[key] - continue - } - if ('reset' === key) { - if (typeof hex === 'string') { - hex = [hex] - } - if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) { - return typeof h !== 'string' - })) { - throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000') - } - var defHexColor = _defColors[key] - if (!hex[0]) { - hex[0] = defHexColor[0] - } - if (hex.length === 1 || !hex[1]) { - hex = [hex[0]] - hex.push(defHexColor[1]) - } - - hex = hex.slice(0, 2) - } else if (typeof hex !== 'string') { - throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000') - } - _finalColors[key] = hex - } - _setTags(_finalColors) -} - -/** - * Reset colors. - */ -ansiHTML.reset = function () { - _setTags(_defColors) -} - -/** - * Expose tags, including open and close. - * @type {Object} - */ -ansiHTML.tags = {} - -if (Object.defineProperty) { - Object.defineProperty(ansiHTML.tags, 'open', { - get: function () { return _openTags } - }) - Object.defineProperty(ansiHTML.tags, 'close', { - get: function () { return _closeTags } - }) -} else { - ansiHTML.tags.open = _openTags - ansiHTML.tags.close = _closeTags -} - -function _setTags (colors) { - // reset all - _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1] - // inverse - _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0] - // dark grey - _openTags['90'] = 'color:#' + colors.darkgrey - - for (var code in _styles) { - var color = _styles[code] - var oriColor = colors[color] || '000' - _openTags[code] = 'color:#' + oriColor - code = parseInt(code) - _openTags[(code + 10).toString()] = 'background:#' + oriColor - } -} - -ansiHTML.reset() - - -/***/ }), - -/***/ "./src/DistortableCollection.js": -/*!**************************************!*\ - !*** ./src/DistortableCollection.js ***! - \**************************************/ -/***/ (function() { - -L.DistortableCollection = L.FeatureGroup.extend({ - options: { - editable: true, - exportOpts: { - exportStartUrl: '//export.mapknitter.org/export', - statusUrl: '//export.mapknitter.org', - exportUrl: 'http://export.mapknitter.org/' - } - }, - initialize: function initialize(options) { - L.setOptions(this, options); - L.FeatureGroup.prototype.initialize.call(this, options); - L.Utils.initTranslation.call(this); - this.editable = this.options.editable; - }, - onAdd: function onAdd(map) { - L.FeatureGroup.prototype.onAdd.call(this, map); - this._map = map; - - if (this.editable) { - this.editing.enable(); - } - /** - * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable, - * events that need to be added on individual images are kept here to do so through `layeradd`. - */ - - - this.on('layeradd', this._addEvents, this); - this.on('layerremove', this._removeEvents, this); - }, - onRemove: function onRemove() { - if (this.editing) { - this.editing.disable(); - } - - this.off('layeradd', this._addEvents, this); - this.off('layerremove', this._removeEvents, this); - }, - _addEvents: function _addEvents(e) { - var layer = e.layer; - L.DomEvent.on(layer, { - dragstart: this._dragStartMultiple, - drag: this._dragMultiple - }, this); - L.DomEvent.on(layer.getElement(), { - mousedown: this._deselectOthers, - - /* Enable longpress for multi select for touch devices. */ - contextmenu: this._longPressMultiSelect - }, this); - }, - _removeEvents: function _removeEvents(e) { - var layer = e.layer; - L.DomEvent.off(layer, { - dragstart: this._dragStartMultiple, - drag: this._dragMultiple - }, this); - L.DomEvent.off(layer.getElement(), { - mousedown: this._deselectOthers, - contextmenu: this._longPressMultiSelect - }, this); - }, - _longPressMultiSelect: function _longPressMultiSelect(e) { - var _this = this; - - if (!this.editable) { - return; - } - - e.preventDefault(); - this.eachLayer(function (layer) { - var edit = layer.editing; - - if (layer.getElement() === e.target && edit.enabled()) { - L.DomUtil.toggleClass(layer.getElement(), 'collected'); - - if (_this.anyCollected()) { - layer.deselect(); - - _this.editing._addToolbar(); - } else { - _this.editing._removeToolbar(); - } - } - }); - }, - isCollected: function isCollected(overlay) { - return L.DomUtil.hasClass(overlay.getElement(), 'collected'); - }, - anyCollected: function anyCollected() { - var layerArr = this.getLayers(); - return layerArr.some(this.isCollected.bind(this)); - }, - _toggleCollected: function _toggleCollected(e, layer) { - if (e.shiftKey) { - /* conditional prevents disabled images from flickering multi-select mode */ - if (layer.editing.enabled()) { - L.DomUtil.toggleClass(e.target, 'collected'); - } - } - - if (this.anyCollected()) { - layer.deselect(); - } else { - this.editing._removeToolbar(); - } - }, - _deselectOthers: function _deselectOthers(e) { - var _this2 = this; - - if (!this.editable) { - return; - } - - this.eachLayer(function (layer) { - if (layer.getElement() !== e.target) { - layer.deselect(); - } else { - _this2._toggleCollected(e, layer); - } - }); - - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - _dragStartMultiple: function _dragStartMultiple(e) { - var overlay = e.target; - var map = this._map; - var i; - - if (!this.isCollected(overlay)) { - return; - } - - this.eachLayer(function (layer) { - layer._dragStartPoints = {}; - layer.deselect(); - - for (i = 0; i < 4; i++) { - var c = layer.getCorner(i); - layer._dragStartPoints[i] = map.latLngToLayerPoint(c); - } - }); - }, - _dragMultiple: function _dragMultiple(e) { - var overlay = e.target; - var map = this._map; - - if (!this.isCollected(overlay)) { - return; - } - - var topLeft = map.latLngToLayerPoint(overlay.getCorner(0)); - - var delta = overlay._dragStartPoints[0].subtract(topLeft); - - this._updateCollectionFromPoints(delta, overlay); - }, - _toRemove: function _toRemove() { - var _this3 = this; - - var layerArr = this.getLayers(); - return layerArr.filter(function (layer) { - var mode = layer.editing._mode; - return _this3.isCollected(layer) && mode !== 'lock'; - }); - }, - _toMove: function _toMove(overlay) { - var _this4 = this; - - var layerArr = this.getLayers(); - return layerArr.filter(function (layer) { - var mode = layer.editing._mode; - return layer !== overlay && _this4.isCollected(layer) && mode !== 'lock'; - }); - }, - _updateCollectionFromPoints: function _updateCollectionFromPoints(delta, overlay) { - var layersToMove = this._toMove(overlay); - - var p = new L.Transformation(1, -delta.x, 1, -delta.y); - var i; - layersToMove.forEach(function (layer) { - var movedPoints = {}; - - for (i = 0; i < 4; i++) { - movedPoints[i] = p.transform(layer._dragStartPoints[i]); - } - - layer.setCornersFromPoints(movedPoints); - }); - }, - _getAvgCmPerPixel: function _getAvgCmPerPixel(imgs) { - var reduce = imgs.reduce(function (sum, img) { - return sum + img.cm_per_pixel; - }, 0); - return reduce / imgs.length; - }, - generateExportJson: function generateExportJson() { - var json = {}; - json.images = []; - this.eachLayer(function (layer) { - if (this.isCollected(layer)) { - var sections = layer._image.src.split('/'); - - var filename = sections[sections.length - 1]; - var zc = layer.getCorners(); - var corners = [{ - lat: zc[0].lat, - lon: zc[0].lng - }, { - lat: zc[1].lat, - lon: zc[1].lng - }, { - lat: zc[3].lat, - lon: zc[3].lng - }, { - lat: zc[2].lat, - lon: zc[2].lng - }]; - json.images.push({ - id: this.getLayerId(layer), - src: layer._image.src, - width: layer._image.width, - height: layer._image.height, - image_file_name: filename, - nodes: corners, - cm_per_pixel: L.ImageUtil.getCmPerPixel(layer) - }); - } - }, this); - json.images = json.images.reverse(); - json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images); - return json; - } -}); - -L.distortableCollection = function (id, options) { - return new L.DistortableCollection(id, options); -}; - -/***/ }), - -/***/ "./src/DistortableImageOverlay.js": -/*!****************************************!*\ - !*** ./src/DistortableImageOverlay.js ***! - \****************************************/ -/***/ (function() { - -L.DistortableImageOverlay = L.ImageOverlay.extend({ - options: { - height: 200, - crossOrigin: true, - // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding) - edgeMinWidth: 50, - editable: true, - mode: 'distort', - selected: false - }, - initialize: function initialize(url, options) { - L.setOptions(this, options); - L.Utils.initTranslation.call(this); - this.edgeMinWidth = this.options.edgeMinWidth; - this.editable = this.options.editable; - this._selected = this.options.selected; - this._url = url; - this.rotation = {}; - }, - onAdd: function onAdd(map) { - var _this = this; - - this._map = map; - - if (!this.getElement()) { - this._initImage(); - } - - map.on('viewreset', this._reset, this); - - if (this.options.corners) { - this._corners = this.options.corners; - - if (map.options.zoomAnimation && L.Browser.any3d) { - map.on('zoomanim', this._animateZoom, this); - } - } // Have to wait for the image to load because need to access its w/h - - - L.DomEvent.on(this.getElement(), 'load', function () { - _this.getPane().appendChild(_this.getElement()); - - _this._initImageDimensions(); - - if (_this.options.rotation) { - var units = _this.options.rotation.deg >= 0 ? 'deg' : 'rad'; - - _this.setAngle(_this.options.rotation[units], units); - } else { - _this.rotation = { - deg: 0, - rad: 0 - }; - - _this._reset(); - } - /* Initialize default corners if not already set */ - - - if (!_this._corners) { - if (map.options.zoomAnimation && L.Browser.any3d) { - map.on('zoomanim', _this._animateZoom, _this); - } - } - /** if there is a featureGroup, only its editable option matters */ - - - var eventParents = _this._eventParents; - - if (eventParents) { - _this.eP = eventParents[Object.keys(eventParents)[0]]; - - if (_this.eP.editable) { - _this.editing.enable(); - } - } else { - if (_this.editable) { - _this.editing.enable(); - } - - _this.eP = null; - } - }); - L.DomEvent.on(this.getElement(), 'click', this.select, this); - L.DomEvent.on(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick - }, this); - /** - * custom events fired from DoubleClickLabels.js. Used to differentiate - * single / dblclick to not deselect images on map dblclick. - */ - - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.on(map, 'click', this.deselect, this); - } - - this.fire('add'); - }, - onRemove: function onRemove(map) { - L.DomEvent.off(this.getElement(), 'click', this.select, this); - L.DomEvent.off(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick - }, this); - L.DomEvent.off(map, 'click', this.deselect, this); - - if (this.editing) { - this.editing.disable(); - } - - this.fire('remove'); - L.ImageOverlay.prototype.onRemove.call(this, map); - }, - _initImageDimensions: function _initImageDimensions() { - var map = this._map; - var originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width'); - var originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height'); - var aspectRatio = parseInt(originalImageWidth) / parseInt(originalImageHeight); - var imageHeight = this.options.height; - var imageWidth = parseInt(aspectRatio * imageHeight); - var center = map.project(map.getCenter()); - var offset = L.point(imageWidth, imageHeight).divideBy(2); - - if (this.options.corners) { - this._corners = this.options.corners; - } else { - this._corners = [map.unproject(center.subtract(offset)), map.unproject(center.add(L.point(offset.x, -offset.y))), map.unproject(center.add(L.point(-offset.x, offset.y))), map.unproject(center.add(offset))]; - } - - this._initialDimensions = { - 'center': center, - 'offset': offset, - 'zoom': map.getZoom() - }; - this.setBounds(L.latLngBounds(this.getCorners())); - }, - _singleClick: function _singleClick(e) { - if (e.type === 'singleclick') { - this.deselect(); - } else { - return; - } - }, - _singleClickListeners: function _singleClickListeners() { - var map = this._map; - L.DomEvent.off(map, 'click', this.deselect, this); - L.DomEvent.on(map, 'singleclick', this.deselect, this); - }, - _resetClickListeners: function _resetClickListeners() { - var map = this._map; - L.DomEvent.on(map, 'click', this.deselect, this); - L.DomEvent.off(map, 'singleclick', this.deselect, this); - }, - isSelected: function isSelected() { - return this._selected; - }, - deselect: function deselect() { - var edit = this.editing; - - if (!edit.enabled()) { - return; - } - - edit._removeToolbar(); - - edit._hideMarkers(); - - this._selected = false; - this.fire('deselect'); - return this; - }, - select: function select(e) { - var edit = this.editing; - var eP = this.eP; - - if (!edit.enabled()) { - return; - } - - if (e) { - L.DomEvent.stopPropagation(e); - } // this ensures deselection of all other images, allowing us to keep collection group optional - - - this._programmaticGrouping(); - - this._selected = true; - - edit._addToolbar(); - - edit._showMarkers(); - - this.fire('select'); // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it - - if (eP && eP.anyCollected()) { - this.deselect(); - return; - } - - return this; - }, - _programmaticGrouping: function _programmaticGrouping() { - this._map.eachLayer(function (layer) { - if (layer instanceof L.DistortableImageOverlay) { - layer.deselect(); - } - }); - }, - setCorner: function setCorner(corner, latlng) { - var edit = this.editing; - this._corners[corner] = latlng; - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - - this.edited = true; - return this; - }, - _cornerExceedsMapLats: function _cornerExceedsMapLats(zoom, corner, map) { - if (map.options.crs.Simple == L.CRS.Simple) { - return false; - } else { - var exceedsTop; - var exceedsBottom; - - if (zoom === 0) { - exceedsTop = map.project(corner).y < 2; - exceedsBottom = map.project(corner).y >= 255; - } else { - exceedsTop = map.project(corner).y / zoom < 2; - exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255; - } - - return exceedsTop || exceedsBottom; - } - }, - setCorners: function setCorners(latlngObj) { - var map = this._map; - var zoom = map.getZoom(); - var edit = this.editing; - var i = 0; // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402 - - for (var k in latlngObj) { - if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) { - // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - return; - } - } - - for (var _k in latlngObj) { - this._corners[i] = latlngObj[_k]; - i += 1; - } - - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - - this.edited = true; - return this; - }, - setCornersFromPoints: function setCornersFromPoints(pointsObj) { - var map = this._map; - var zoom = map.getZoom(); - var edit = this.editing; - var i = 0; - - for (var k in pointsObj) { - var corner = map.layerPointToLatLng(pointsObj[k]); - - if (this._cornerExceedsMapLats(zoom, corner, map)) { - // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - return; - } - } - - for (var _k2 in pointsObj) { - this._corners[i] = map.layerPointToLatLng(pointsObj[_k2]); - i += 1; - } - - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - - this.edited = true; - return this; - }, - scaleBy: function scaleBy(scale) { - var map = this._map; - var center = map.project(this.getCenter()); - var i; - var p; - var scaledCorners = {}; - - if (scale === 0) { - return; - } - - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(center).multiplyBy(scale).add(center); - scaledCorners[i] = map.unproject(p); - } - - this.setCorners(scaledCorners); - return this; - }, - getAngle: function getAngle() { - var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'deg'; - var matrix = this.getElement().style[L.DomUtil.TRANSFORM].split('matrix3d')[1].slice(1, -1).split(','); - var row0x = matrix[0]; - var row0y = matrix[1]; - var row1x = matrix[4]; - var row1y = matrix[5]; - var determinant = row0x * row1y - row0y * row1x; - var angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad'); - - if (determinant < 0) { - angle += angle < 0 ? Math.PI : -Math.PI; - } - - if (angle < 0) { - angle = 2 * Math.PI + angle; - } - - return unit === 'deg' ? Math.round(L.TrigUtil.radiansToDegrees(angle)) : L.Util.formatNum(angle, 2); - }, - setAngle: function setAngle(angle) { - var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'deg'; - var currentAngle = this.getAngle(unit); - var angleToRotateBy = angle - currentAngle; - this.rotateBy(angleToRotateBy, unit); - return this; - }, - rotateBy: function rotateBy(angle) { - var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'deg'; - var map = this._map; - var center = map.project(this.getCenter()); - var corners = {}; - var i; - var p; - var q; - - if (unit === 'deg') { - angle = L.TrigUtil.degreesToRadians(angle); - } - - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(center); - q = L.point(Math.cos(angle) * p.x - Math.sin(angle) * p.y, Math.sin(angle) * p.x + Math.cos(angle) * p.y); - corners[i] = map.unproject(q.add(center)); - } - - this.setCorners(corners); - return this; - }, - dragBy: function dragBy(formerPoint, newPoint) { - var map = this._map; - var i; - var p; - var transCorners = {}; - var delta = map.project(formerPoint).subtract(map.project(newPoint)); - - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(delta); - transCorners[i] = map.unproject(p); - } - - this.setCorners(transCorners); - }, - restore: function restore() { - var map = this._map; - var center = this._initialDimensions.center; - var offset = this._initialDimensions.offset; - var zoom = this._initialDimensions.zoom; - var corners = [center.subtract(offset), center.add(L.point(offset.x, -offset.y)), center.add(L.point(-offset.x, offset.y)), center.add(offset)]; - - for (var i = 0; i < 4; i++) { - if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) { - this.setCorner(i, map.unproject(corners[i], zoom)); - } - } - - this.edited = false; - this.fire('restore'); - return this; - }, - - /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */ - - /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */ - _getTranslateString: function _getTranslateString(point) { - // on WebKit browsers (Chrome/Safari/iOS Safari/Android) - // using translate3d instead of translate - // makes animation smoother as it ensures HW accel is used. - // Firefox 13 doesn't care - // (same speed either way), Opera 12 doesn't support translate3d - var is3d = L.Browser.webkit3d; - var open = 'translate' + (is3d ? '3d' : '') + '('; - var close = (is3d ? ',0' : '') + ')'; - return open + point.x + 'px,' + point.y + 'px' + close; - }, - _reset: function _reset() { - var map = this._map; - var image = this.getElement(); - var latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map); - - var transformMatrix = this._calculateProjectiveTransform(latLngToLayerPoint); - - var topLeft = latLngToLayerPoint(this.getCorner(0)); - var warp = L.DomUtil.getMatrixString(transformMatrix); - - var translation = this._getTranslateString(topLeft); - /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ - - - image._leaflet_pos = topLeft; - image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); - /* Set origin to the upper-left corner rather than - * the center of the image, which is the default. - */ - - image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0'; - this.rotation.deg = this.getAngle(); - this.rotation.rad = this.getAngle('rad'); - }, - - /* - * Calculates the transform string that will be - * correct *at the end* of zooming. - * Leaflet then generates a CSS3 animation between the current transform and - * future transform which makes the transition appear smooth. - */ - _animateZoom: function _animateZoom(event) { - var map = this._map; - var image = this.getElement(); - - var latLngToNewLayerPoint = function latLngToNewLayerPoint(latlng) { - return map._latLngToNewLayerPoint(latlng, event.zoom, event.center); - }; - - var transformMatrix = this._calculateProjectiveTransform(latLngToNewLayerPoint); - - var topLeft = latLngToNewLayerPoint(this.getCorner(0)); - var warp = L.DomUtil.getMatrixString(transformMatrix); - - var translation = this._getTranslateString(topLeft); - /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ - - - image._leaflet_pos = topLeft; - image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); - }, - getCorners: function getCorners() { - return this._corners; - }, - getCorner: function getCorner(i) { - return this._corners[i]; - }, - // image (vertex) centroid calculation - getCenter: function getCenter() { - var map = this._map; - var reduce = this.getCorners().reduce(function (agg, corner) { - return agg.add(map.project(corner)); - }, L.point(0, 0)); - return map.unproject(reduce.divideBy(4)); - }, - _calculateProjectiveTransform: function _calculateProjectiveTransform(latLngToCartesian) { - /* Setting reasonable but made-up image defaults - * allow us to place images on the map before - * they've finished downloading. */ - var offset = latLngToCartesian(this.getCorner(0)); - var w = this.getElement().offsetWidth || 500; - var h = this.getElement().offsetHeight || 375; - var c = []; - var j; - /* Convert corners to container points (i.e. cartesian coordinates). */ - - for (j = 0; j < 4; j++) { - c.push(latLngToCartesian(this.getCorner(j))._subtract(offset)); - } - /* - * This matrix describes the action of - * the CSS transform on each corner of the image. - * It maps from the coordinate system centered - * at the upper left corner of the image - * to the region bounded by the latlngs in this._corners. - * For example: - * 0, 0, c[0].x, c[0].y - * says that the upper-left corner of the image - * maps to the first latlng in this._corners. - */ - - - return L.MatrixUtil.general2DProjection(0, 0, c[0].x, c[0].y, w, 0, c[1].x, c[1].y, 0, h, c[2].x, c[2].y, w, h, c[3].x, c[3].y); - } -}); - -L.distortableImageOverlay = function (id, options) { - return new L.DistortableImageOverlay(id, options); -}; - -L.Map.addInitHook(function () { - if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) { - L.DomUtil.addClass(this.getContainer(), 'ldi'); - } -}); - -/***/ }), - -/***/ "./src/components/DistortableImage.Keymapper.js": -/*!******************************************************!*\ - !*** ./src/components/DistortableImage.Keymapper.js ***! - \******************************************************/ -/***/ (function() { - -var _this = this; - -L.DomUtil = L.DomUtil || {}; -L.DistortableImage = L.DistortableImage || {}; -L.distortableImage = L.DistortableImage; -L.DistortableImage.Keymapper = L.Handler.extend({ - options: { - position: 'topright' - }, - initialize: function initialize(map, options) { - this._map = map; - L.setOptions(this, options); - }, - addHooks: function addHooks() { - if (!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 removeHooks() { - if (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 = false; - } - }, - _buildContainer: function _buildContainer() { - var container = L.DomUtil.create('div', 'ldi-keymapper-hide'); - container.setAttribute('id', 'ldi-keymapper'); - var divider = L.DomUtil.create('br', 'divider'); - container.appendChild(divider); - return container; - }, - _createButton: function _createButton() { - var toggler = L.DomUtil.create('a', ''); - toggler.innerHTML = L.IconUtil.create('keyboard_open'); - toggler.setAttribute('id', 'toggle-keymapper'); - toggler.setAttribute('href', '#'); - toggler.setAttribute('title', 'Show keymap'); // Will force screen readers like VoiceOver to read this as "Show keymap - button" - - toggler.setAttribute('role', 'button'); - toggler.setAttribute('aria-label', 'Show keymap'); - return toggler; - }, - _wrap: function _wrap() { - var wrap = L.DomUtil.create('div', ''); - wrap.setAttribute('id', 'keymapper-wrapper'); - wrap.style.display = 'none'; - return wrap; - }, - _setMapper: function _setMapper(container, wrap, button) { - this._keymapper = L.control({ - position: this.options.position - }); - - this._keymapper.onAdd = function () { - container.appendChild(wrap); - wrap.insertAdjacentHTML('beforeend', '' + '
    ' + - /* eslint-disable */ - '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
    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
    '); - /* eslint-enable */ - - container.appendChild(button); - return container; - }; - - this._keymapper.addTo(this._map); - }, - _toggleKeymapper: function _toggleKeymapper(e) { - e.preventDefault(); - this._container.className = this._container.className === 'ldi-keymapper leaflet-control' ? 'ldi-keymapper-hide leaflet-control' : 'ldi-keymapper leaflet-control'; - this._scrollWrapper.style.display = this._scrollWrapper.style.display === 'none' ? 'block' : 'none'; - this._toggler.innerHTML = this._toggler.innerHTML === 'close' ? L.IconUtil.create('keyboard_open') : 'close'; - L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap'); - L.DomUtil.toggleClass(this._toggler, 'close-icon'); - }, - _injectIconSet: function _injectIconSet() { - if (document.querySelector('#keymapper-iconset')) { - return; - } - - var el = L.DomUtil.create('div', ''); - el.id = 'keymapper-iconset'; - el.setAttribute('hidden', 'hidden'); - this._iconset = new L.KeymapperIconSet().render(); - el.innerHTML = this._iconset; - document.querySelector('.leaflet-control-container').appendChild(el); - } -}); -L.DistortableImage.Keymapper.addInitHook(function () { - L.DistortableImage.Keymapper.prototype._n = L.DistortableImage.Keymapper.prototype._n ? L.DistortableImage.Keymapper.prototype._n + 1 : 1; // dont enable keymapper for mobile - - if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) { - _this.enable(); - - _this._injectIconSet(); - } -}); - -L.distortableImage.keymapper = function (map, options) { - return new L.DistortableImage.Keymapper(map, options); -}; - -/***/ }), - -/***/ "./src/edit/DistortableCollection.Edit.js": -/*!************************************************!*\ - !*** ./src/edit/DistortableCollection.Edit.js ***! - \************************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; // this class holds the keybindings and toolbar API for an image collection instance - -L.DistortableCollection.Edit = L.Handler.extend({ - options: { - keymap: L.distortableImage.group_action_map - }, - initialize: function initialize(group, options) { - this._group = group; - this._exportOpts = group.options.exportOpts; - L.setOptions(this, options); - L.distortableImage.group_action_map.Escape = '_decollectAll'; - }, - addHooks: function addHooks() { - var group = this._group; - var map = 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); - - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.on(map, 'click', this._decollectAll, this); - } - - L.DomEvent.on(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick, - boxcollectend: this._addCollections - }, this); - this._group.editable = true; - - this._group.eachLayer(function (layer) { - return layer.editing.enable(); - }); - }, - removeHooks: function removeHooks() { - var group = this._group; - var map = group._map; - L.DomEvent.off(document, 'keydown', this._onKeyDown, this); - - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.off(map, 'click', this._decollectAll, this); - } - - L.DomEvent.off(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick, - boxcollectend: this._addCollections - }, this); - - this._decollectAll(); - - this._group.editable = false; - - this._group.eachLayer(function (layer) { - return layer.editing.disable(); - }); - }, - enable: function enable() { - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - this._enabled = false; - this.removeHooks(); - return this; - }, - _onKeyDown: function _onKeyDown(e) { - var keymap = this.options.keymap; - var handlerName = keymap[e.key]; - - if (!this[handlerName]) { - return; - } - - if (this._group.anyCollected()) { - this[handlerName].call(this); - } - }, - _singleClick: function _singleClick(e) { - if (e.type === 'singleclick') { - this._decollectAll(e); - } else { - return; - } - }, - _singleClickListeners: function _singleClickListeners() { - var map = this._group._map; - L.DomEvent.off(map, 'click', this._decollectAll, this); - L.DomEvent.on(map, 'singleclick', this._decollectAll, this); - }, - _resetClickListeners: function _resetClickListeners() { - var map = this._group._map; - L.DomEvent.on(map, 'click', this._decollectAll, this); - L.DomEvent.off(map, 'singleclick', this._decollectAll, this); - }, - _decollectAll: function _decollectAll(e) { - var oe; - - if (e) { - oe = e.originalEvent; - } - /** - * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete - * also prevents deselection following a click on a disabled img by differentiating it from the map - */ - - - if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) { - return; - } - - this._group.eachLayer(function (layer) { - L.DomUtil.removeClass(layer.getElement(), 'collected'); - layer.deselect(); - }); - - this._removeToolbar(); - - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - _unlockGroup: function _unlockGroup() { - var _this = this; - - if (!this.hasTool(L.UnlockAction)) { - return; - } - - this._group.eachLayer(function (layer) { - if (_this._group.isCollected(layer)) { - var edit = layer.editing; - - edit._unlock(); // unlock updates the layer's handles; deselect to ensure they're hidden - - - layer.deselect(); - } - }); - }, - _lockGroup: function _lockGroup() { - var _this2 = this; - - if (!this.hasTool(L.LockAction)) { - return; - } - - this._group.eachLayer(function (layer) { - if (_this2._group.isCollected(layer)) { - var edit = layer.editing; - - edit._lock(); // map.addLayer also deselects the image, so we reselect here - - - L.DomUtil.addClass(layer.getElement(), 'collected'); - } - }); - }, - _addCollections: function _addCollections(e) { - var _this3 = this; - - var box = e.boxCollectBounds; - var map = this._group._map; - - this._group.eachLayer(function (layer) { - var edit = layer.editing; - - if (layer.isSelected()) { - layer.deselect(); - } - - var zoom = map.getZoom(); - var center = map.getCenter(); - var imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1)); - imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center); - - if (box.intersects(imgBounds) && edit.enabled()) { - if (!_this3.toolbar) { - _this3._addToolbar(); - } - - L.DomUtil.addClass(layer.getElement(), 'collected'); - } - }); - }, - _removeGroup: function _removeGroup(e) { - var _this4 = this; - - if (!this.hasTool(L.DeleteAction)) { - return; - } - - var layersToRemove = this._group._toRemove(); - - var n = layersToRemove.length; - - if (n === 0) { - return; - } - - var choice = L.DomUtil.confirmDeletes(n); - - if (choice) { - layersToRemove.forEach(function (layer) { - _this4._group.removeLayer(layer); - }); - - if (!this._group.anyCollected()) { - this._removeToolbar(); - } - } - - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - cancelExport: function cancelExport() { - if (!this.customCollection) { - this._exportOpts.collection = undefined; - } - - clearInterval(this.updateInterval); - }, - _addToolbar: function _addToolbar() { - var group = this._group; - var map = group._map; - - if (group.options.suppressToolbar || this.toolbar) { - return; - } - - this.toolbar = L.distortableImage.controlBar({ - actions: this.editActions, - position: 'topleft' - }).addTo(map, group); - }, - _removeToolbar: function _removeToolbar() { - var map = this._group._map; - - if (this.toolbar) { - map.removeLayer(this.toolbar); - this.toolbar = false; - } else { - return false; - } - }, - hasTool: function hasTool(value) { - return this.editActions.some(function (action) { - return action === value; - }); - }, - addTool: function addTool(value) { - if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { - this._removeToolbar(); - - this.editActions.push(value); - - this._addToolbar(); - } - - return this; - }, - removeTool: function removeTool(value) { - var _this5 = this; - - this.editActions.some(function (item, idx) { - if (_this5.editActions[idx] === value) { - _this5._removeToolbar(); - - _this5.editActions.splice(idx, 1); - - _this5._addToolbar(); - - return true; - } else { - return false; - } - }); - return this; - }, - startExport: function startExport() { - var _this6 = this; - - if (!this.hasTool(L.ExportAction)) { - return; - } - - return new Promise(function (resolve) { - var opts = _this6._exportOpts; - opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion - - var statusUrl; - _this6.updateInterval = null; // this may be overridden to update the UI to show export progress or completion - - var _defaultUpdater = function _defaultUpdater(data) { - data = JSON.parse(data); // optimization: fetch status directly from google storage: - - if (data.status_url) { - if (statusUrl !== data.status_url && data.status_url.match('.json')) { - // if (data.status_url && data.status_url.substr(0,1) === "/") { - // opts.statusUrl = opts.statusUrl + data.status_url; - // } else { - statusUrl = data.status_url; // } - } - - if (data.status === 'complete') { - clearInterval(_this6.updateInterval); - - if (!_this6.customCollection) { - _this6._exportOpts.collection = undefined; - } - - resolve(); - - if (data.jpg !== null) { - alert('Export succeeded. ' + opts.exportUrl + data.jpg); - } - } // TODO: update to clearInterval when status == "failed" if we update that in this file: - // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb - - - console.log(data); - } - }; // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json; - // this may be overridden to integrate with any UI - - - var _defaultHandleStatusRes = function _defaultHandleStatusRes(data) { - statusUrl = opts.statusUrl + data; // repeatedly fetch the status.json - - _this6.updateInterval = setInterval(function () { - var reqOpts = { - method: 'GET' - }; - var req = new Request("".concat(statusUrl, "?").concat(Date.now()), reqOpts); - fetch(req).then(function (res) { - if (res.ok) { - return res.text(); - } - }).then(opts.updater); - }, opts.frequency); - }; // initiate the export - - - var _defaultFetchStatusUrl = function _defaultFetchStatusUrl(mergedOpts) { - var form = new FormData(); - form.append('collection', JSON.stringify(mergedOpts.collection)); - form.append('scale', mergedOpts.scale); - form.append('upload', true); - var reqOpts = { - method: 'POST', - body: form - }; - var req = new Request(mergedOpts.exportStartUrl, reqOpts); - fetch(req).then(function (res) { - if (res.ok) { - return res.text(); - } - }).then(mergedOpts.handleStatusRes); - }; // If the user has passed collection property - - - _this6.customCollection = !!opts.collection; - - if (!_this6.customCollection) { - opts.collection = _this6._group.generateExportJson().images; - } - - opts.frequency = opts.frequency || 3000; - opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel ! - - opts.updater = opts.updater || _defaultUpdater; - opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes; - opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl; - opts.fetchStatusUrl(opts); - }); - } -}); - -L.distortableCollection.edit = function (group, options) { - return new L.DistortableCollection.Edit(group, options); -}; - -/***/ }), - -/***/ "./src/edit/DistortableImage.Edit.js": -/*!*******************************************!*\ - !*** ./src/edit/DistortableImage.Edit.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; // holds the keybindings & toolbar API for an individual image instance - -L.DistortableImage.Edit = L.Handler.extend({ - options: { - opacity: 0.7, - outline: '1px solid red', - keymap: L.distortableImage.action_map - }, - initialize: function initialize(overlay, options) { - this._overlay = overlay; - this._toggledImage = false; - this._mode = overlay.options.mode; - this._transparent = false; - this._outlined = false; - L.setOptions(this, options); - L.distortableImage.action_map.Escape = '_deselect'; - }, - - /* Run on image selection. */ - addHooks: function addHooks() { - var overlay = this._overlay; - this.editActions = this.options.actions; - /* bring the selected image into view */ - - overlay.bringToFront(); - - this._initModes(); - - this._initHandles(); - - this._appendHandlesandDragable(); - - if (overlay.isSelected() && !overlay.options.suppressToolbar) { - this._addToolbar(); - } - - this.parentGroup = overlay.eP ? overlay.eP : false; - L.DomEvent.on(overlay.getElement(), { - dblclick: this.nextMode - }, this); - L.DomEvent.on(window, 'keydown', this._onKeyDown, this); - }, - - /* Run on image deselection. */ - removeHooks: function removeHooks() { - var overlay = this._overlay; - var eP = this.parentGroup; // First, check if dragging exists - it may be off due to locking - - this._disableDragging(); - - if (this.toolbar) { - this._removeToolbar(); - } - - for (var handle in this._handles) { - L.DomUtil.remove(handle); - } - /** - * ensures if you disable an image while it is multi-selected - * additional deselection logic is run - */ - - - if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) { - L.DomUtil.removeClass(overlay.getElement(), 'collected'); - } - - if (eP && !eP.anyCollected() && eP.editing.toolbar) { - eP.editing._removeToolbar(); - } - - L.DomEvent.off(overlay.getElement(), { - dblclick: this.nextMode - }, this); - L.DomEvent.off(window, 'keydown', this._onKeyDown, this); - }, - disable: function disable() { - if (!this._enabled) { - return this; - } - - this._overlay.deselect(); - - this._enabled = false; - this.removeHooks(); - return this; - }, - _initModes: function _initModes() { - this._modes = {}; // passed from L.DistortablImage.PopupBar. If the mode is one - // of the current toolbar actions, adds it to this._modes - - for (var mode in L.DistortableImage.Edit.MODES) { - var action = L.DistortableImage.Edit.MODES[mode]; - - if (this.editActions.indexOf(action) !== -1) { - this._modes[mode] = action; - } - } // sets the current mode to the 1st available one if the one selected - // during initialization is not available - - - if (!this._modes[this._mode]) { - this._mode = Object.keys(this._modes)[0]; - } - }, - _initHandles: function _initHandles() { - var overlay = this._overlay; - var i; - this._dragHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._dragHandles.addLayer(L.dragHandle(overlay, i)); - } - - this._scaleHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._scaleHandles.addLayer(L.scaleHandle(overlay, i)); - } - - this._distortHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._distortHandles.addLayer(L.distortHandle(overlay, i)); - } - - this._rotateHandles = L.layerGroup(); // individual rotate - - for (i = 0; i < 4; i++) { - this._rotateHandles.addLayer(L.rotateHandle(overlay, i)); - } // handle includes rotate AND scale - - - this._freeRotateHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i)); - } - - this._lockHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._lockHandles.addLayer(L.lockHandle(overlay, i, { - draggable: false - })); - } - - this._handles = { - drag: this._dragHandles, - scale: this._scaleHandles, - distort: this._distortHandles, - rotate: this._rotateHandles, - freeRotate: this._freeRotateHandles, - lock: this._lockHandles - }; - }, - _appendHandlesandDragable: function _appendHandlesandDragable() { - var ov = this._overlay; // won't throw error if user adds 0 mode actions to toolbar - - if (!this._mode) { - this._enableDragging(); - - return; - } - - this._updateHandle(); - - if (!ov.isSelected() && this.currentHandle) { - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(0); - - if (handle.dragging) { - handle.dragging.disable(); - } - }); - } - - if (!this.isMode('lock')) { - this._enableDragging(); - } - }, - _onKeyDown: function _onKeyDown(e) { - var keymap = this.options.keymap; - var handlerName = keymap[e.key]; - var ov = this._overlay; - var eP = this.parentGroup; - - if (eP && eP.anyCollected()) { - return; - } - - if (this[handlerName] !== undefined && !ov.options.suppressToolbar) { - if (ov.isSelected() && this.toolbar) { - this[handlerName].call(this); - } - } - }, - replaceTool: function replaceTool(old, next) { - var _this = this; - - if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) { - return this; - } - - this.editActions.some(function (item, idx) { - if (item === old) { - _this._removeToolbar(); - - _this.editActions[idx] = next; - - _this._addToolbar(); - - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === old) { - delete _this._modes[mode]; - - _this._nextOrNone(mode); - } else if (L.DistortableImage.Edit.MODES[mode] === next) { - _this._modes[mode] = next; - } - } - - return true; - } - }); - return this; - }, - addTool: function addTool(value) { - if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { - this._removeToolbar(); - - this.editActions.push(value); - - this._addToolbar(); - - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === value) { - this._modes[mode] = value; - } - } - - if (!this._overlay.isSelected()) { - this._removeToolbar(); - } - } - - return this; - }, - hasTool: function hasTool(value) { - return this.editActions.some(function (action) { - return action === value; - }); - }, - removeTool: function removeTool(value) { - var _this2 = this; - - this.editActions.some(function (item, idx) { - if (item === value) { - _this2._removeToolbar(); - - _this2.editActions.splice(idx, 1); - - _this2._addToolbar(); - - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === value) { - delete _this2._modes[mode]; - - _this2._nextOrNone(mode); - } - } - - return true; - } - }); - - if (!this._overlay.isSelected()) { - this._removeToolbar(); - } - - return this; - }, - // set the mode to the next mode or if that was the last one set mode to '' - _nextOrNone: function _nextOrNone(mode) { - if (this.isMode(mode)) { - if (Object.keys(this.getModes()).length >= 1) { - this.nextMode(); - } else { - if (mode === 'lock') { - this._enableDragging(); - } - - this._mode = ''; - - this._updateHandle(); - } - } - }, - _removeToolbar: function _removeToolbar() { - var ov = this._overlay; - var map = ov._map; - - if (this.toolbar) { - map.removeLayer(this.toolbar); - this.toolbar = false; - } - }, - _enableDragging: function _enableDragging() { - var _this3 = this; - - var overlay = this._overlay; - var map = overlay._map; - this.dragging = new L.Draggable(overlay.getElement()); - this.dragging.enable(); - /* Hide toolbars and markers while dragging; click will re-show it */ - - this.dragging.on('dragstart', function () { - overlay.fire('dragstart'); - - _this3._removeToolbar(); - }); - /* - * Adjust default behavior of L.Draggable, which overwrites the CSS3 - * distort transformations that we set when it calls L.DomUtil.setPosition. - */ - - this.dragging._updatePosition = function () { - var topLeft = overlay.getCorner(0); - - var delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft)); - - var currentPoint; - var corners = {}; - var i; - this.fire('predrag'); - - for (i = 0; i < 4; i++) { - currentPoint = map.latLngToLayerPoint(overlay.getCorner(i)); - corners[i] = map.layerPointToLatLng(currentPoint.add(delta)); - } - - overlay.setCorners(corners); - overlay.fire('drag'); - this.fire('drag'); - }; - - this.dragging.on('dragend', function () { - overlay.fire('dragend'); - }); - }, - _disableDragging: function _disableDragging() { - if (this.dragging) { - this.dragging.disable(); - delete this.dragging; - } - }, - _dragMode: function _dragMode() { - this.setMode('drag'); - }, - _scaleMode: function _scaleMode() { - this.setMode('scale'); - }, - _distortMode: function _distortMode() { - this.setMode('distort'); - }, - _rotateMode: function _rotateMode() { - this.setMode('rotate'); - }, - _freeRotateMode: function _freeRotateMode() { - this.setMode('freeRotate'); - }, - _toggleLockMode: function _toggleLockMode() { - if (this.isMode('lock')) { - this._unlock(); - } else { - this._lock(); - } - }, - _toggleOpacity: function _toggleOpacity() { - var image = this._overlay.getElement(); - - var opacity; - - if (!this.hasTool(L.OpacityAction)) { - return; - } - - this._transparent = !this._transparent; - opacity = this._transparent ? this.options.opacity : 1; - L.DomUtil.setOpacity(image, opacity); - image.setAttribute('opacity', opacity); - - this._refresh(); - }, - _toggleBorder: function _toggleBorder() { - var image = this._overlay.getElement(); - - var outline; - - if (!this.hasTool(L.BorderAction)) { - return; - } - - this._outlined = !this._outlined; - outline = this._outlined ? this.options.outline : 'none'; - image.style.outline = outline; - - this._refresh(); - }, - // compare this to using overlay zIndex - _toggleOrder: function _toggleOrder() { - if (this._toggledImage) { - this._stackUp(); - } else { - this._stackDown(); - } - }, - _removeOverlay: function _removeOverlay() { - var ov = this._overlay; - var eP = this.parentGroup; - - if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { - return; - } - - var choice = L.DomUtil.confirmDelete(); - - if (!choice) { - return; - } - - this._removeToolbar(); - - if (eP) { - eP.removeLayer(ov); - } else { - ov._map.removeLayer(ov); - } - }, - // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82 - _getExport: function _getExport() { - var overlay = this._overlay; - var map = overlay._map; - var img = overlay.getElement(); - - if (!this.hasTool(L.ExportAction)) { - return; - } // make a new image - - - var downloadable = new Image(); - downloadable.id = downloadable.id || 'tempId12345'; - document.body.appendChild(downloadable); - - downloadable.onload = function onLoadDownloadableImage() { - var height = downloadable.height; - var width = downloadable.width; - var nw = map.latLngToLayerPoint(overlay.getCorner(0)); - var ne = map.latLngToLayerPoint(overlay.getCorner(1)); - var sw = map.latLngToLayerPoint(overlay.getCorner(2)); - var se = map.latLngToLayerPoint(overlay.getCorner(3)); // I think this is to move the image to the upper left corner, - // eslint-disable-next-line max-len - // jywarren: i think we may need these or the image goes off the edge of the canvas - // jywarren: but these seem to break the distortion math... - // jywarren: i think it should be rejiggered so it - // finds the most negative values of x and y and then - // adds those to all coordinates - // nw.x -= nw.x; - // ne.x -= nw.x; - // se.x -= nw.x; - // sw.x -= nw.x; - // nw.y -= nw.y; - // ne.y -= nw.y; - // se.y -= nw.y; - // sw.y -= nw.y; - // run once warping is complete - - downloadable.onload = function () { - L.DomUtil.remove(downloadable); - }; - - if (window && window.hasOwnProperty('warpWebGl')) { - warpWebGl(downloadable.id, [0, 0, width, 0, width, height, 0, height], [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y], true // trigger download - ); - } - }; - - downloadable.src = overlay.options.fullResolutionSrc || img.src; - }, - _stackUp: function _stackUp() { - var t = this._toggledImage; - - if (!t || !this.hasTool(L.StackAction)) { - return; - } - - this._toggledImage = false; - - this._overlay.bringToFront(); - - this._refresh(); - }, - _stackDown: function _stackDown() { - var t = this._toggledImage; - - if (t || !this.hasTool(L.StackAction)) { - return; - } - - this._toggledImage = true; - - this._overlay.bringToBack(); - - this._refresh(); - }, - _unlock: function _unlock() { - var ov = this._overlay; - var map = ov._map; - var eP = this.parentGroup; - - if (!this.isMode('lock')) { - return; - } - - if (eP && !eP.isCollected(ov) || !eP) { - if (!this.hasTool(L.LockAction)) { - return; - } - } - - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - - if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) { - this._mode = ''; - this.currentHandle = ''; - } else { - this._mode = ov.options.mode; - } - - this._updateHandle(); - - this._enableDragging(); - - this._refresh(); - }, - _lock: function _lock() { - var ov = this._overlay; - var map = ov._map; - var eP = this.parentGroup; - - if (this.isMode('lock')) { - return; - } - - if (eP && !eP.isCollected(ov) || !eP) { - if (!this.hasTool(L.LockAction)) { - return; - } - } - - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - - this._mode = 'lock'; - - this._updateHandle(); - - this._disableDragging(); - - this._refresh(); - }, - _deselect: function _deselect() { - this._overlay.deselect(); - }, - _showMarkers: function _showMarkers(e) { - var eP = this.parentGroup; - - if (!this.currentHandle) { - return; - } // only markers we want in collect interface for now is lock - - - if (!this.isMode('lock') && eP && eP.anyCollected()) { - return; - } - - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(1); - - if (handle.dragging) { - handle.dragging.enable(); - } - - L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive'); - }); - }, - _hideMarkers: function _hideMarkers() { - var ov = this._overlay; - var eP = this.parentGroup; // workaround for race condition w/ feature group - - if (!this._handles) { - this._initHandles(); - } - - if (!this.currentHandle) { - return; - } - - if (this.isMode('lock') && eP && eP.isCollected(ov)) { - return; - } - - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(0); - - if (handle.dragging) { - handle.dragging.disable(); - } - - L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive'); - }); - }, - _updateHandle: function _updateHandle() { - var ov = this._overlay; - var map = ov._map; - var mode = this.getMode(); - - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - - this.currentHandle = mode === '' ? '' : this._handles[mode]; - - if (this.currentHandle !== '') { - map.addLayer(this.currentHandle); - } - }, - _addToolbar: function _addToolbar() { - var ov = this._overlay; - var eP = this.parentGroup; - var map = ov._map; // Find the topmost point on the image. - - var corners = ov.getCorners(); - var maxLat = -Infinity; - - if (eP && eP.anyCollected()) { - eP.editing._addToolbar(); - - return; - } - - if (ov.options.suppressToolbar || this.toolbar) { - return; - } - - for (var i = 0; i < corners.length; i++) { - if (corners[i].lat > maxLat) { - maxLat = corners[i].lat; - } - } // Longitude is based on the centroid of the image. - - - var raisedPoint = ov.getCenter(); - raisedPoint.lat = maxLat; - this.toolbar = L.distortableImage.popupBar(raisedPoint, { - actions: this.editActions - }).addTo(map, ov); - ov.fire('toolbar:created'); - }, - _refresh: function _refresh() { - if (this.toolbar) { - this._removeToolbar(); - } - - this._addToolbar(); - }, - _updateToolbarPos: function _updateToolbarPos() { - var overlay = this._overlay; // Find the topmost point on the image. - - var corners = overlay.getCorners(); - var toolbar = this.toolbar; - var maxLat = -Infinity; - - if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) { - for (var i = 0; i < corners.length; i++) { - if (corners[i].lat > maxLat) { - maxLat = corners[i].lat; - } - } // Longitude is based on the centroid of the image. - - - var raisedPoint = overlay.getCenter(); - raisedPoint.lat = maxLat; - - if (!overlay.options.suppressToolbar) { - this.toolbar.setLatLng(raisedPoint); - } - } - }, - hasMode: function hasMode(mode) { - return !!this._modes[mode]; - }, - getMode: function getMode() { - if (!this.enabled()) { - return; - } - - return this._mode; - }, - getModes: function getModes() { - return this._modes; - }, - isMode: function isMode(mode) { - if (!this.enabled()) { - return false; - } - - return this._mode === mode; - }, - setMode: function setMode(newMode) { - var ov = this._overlay; - var eP = this.parentGroup; - var mode = this.getMode(); - - if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) { - return; - } - - if (this.toolbar) { - this.toolbar.clickTool(newMode); - } - - if (this.isMode('lock') && !this.dragging) { - this._enableDragging(); - } - - this._mode = newMode; - - if (this.isMode('lock')) { - this._disableDragging(); - } - - this._updateHandle(); - - this._refresh(); - - if (eP && eP.isCollected(ov)) { - ov.deselect(); - } - - return this; - }, - - /** - * need to attach a stop to img dblclick or it will propagate to - * the map and fire the handler that shows map location labels on map dblclick. - */ - nextMode: function nextMode(e) { - var mode = this.getMode(); - var eP = this.parentGroup; - var modesArray = Object.keys(this.getModes()); - var idx = modesArray.indexOf(mode); - var nextIdx = (idx + 1) % modesArray.length; - var newMode = modesArray[nextIdx]; - - if (e) { - if (eP && eP.anyCollected()) { - return; - } - - L.DomEvent.stop(e); - } - - return this.setMode(newMode); - } -}); - -L.distortableImage.edit = function (overlay, options) { - return new L.DistortableImage.Edit(overlay, options); -}; - -/***/ }), - -/***/ "./src/edit/actions/BorderAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/BorderAction.js ***! - \******************************************/ -/***/ (function() { - -L.BorderAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var mode = edit._mode; - var use; - var tooltip; - - if (edit._outlined) { - use = 'border_outer'; - tooltip = overlay.options.translation.removeBorder; - } else { - use = 'border_clear'; - tooltip = overlay.options.translation.addBorder; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: mode === 'lock' ? 'disabled' : '' - }; // conditional for disabling keybindings for this action when the image is locked. - - L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer'); - L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border'); - - edit._toggleBorder(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DeleteAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/DeleteAction.js ***! - \******************************************/ -/***/ (function() { - -L.DeleteAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use = 'delete_forever'; - var tooltip; - /** - * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only - * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods. - */ - - if (edit instanceof L.DistortableImage.Edit) { - tooltip = overlay.options.translation.deleteImage; // backspace windows / delete mac - - L.DistortableImage.action_map.Backspace = edit._mode === 'lock' ? '' : '_removeOverlay'; - } else { - tooltip = overlay.options.translation.deleteImages; - L.DistortableImage.group_action_map.Backspace = edit._mode === 'lock' ? '' : '_removeGroup'; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - if (edit instanceof L.DistortableImage.Edit) { - edit._removeOverlay(); - } else { - edit._removeGroup(); - } - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DistortAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/DistortAction.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'distort', - tooltip: overlay.options.translation.distortImage, - className: 'distort' - }; - L.DistortableImage.action_map.d = '_distortMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._distortMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DragAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/DragAction.js ***! - \****************************************/ -/***/ (function() { - -L.DragAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'drag', - tooltip: overlay.options.translation.dragImage, - className: 'drag' - }; - L.DistortableImage.action_map.D = '_dragMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._dragMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/EditAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/EditAction.js ***! - \****************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; -L.distortableImage = L.DistortableImage; -L.DistortableImage.action_map = {}; -L.EditAction = L.Toolbar2.Action.extend({ - options: { - toolbarIcon: { - svg: false, - html: '', - className: '', - tooltip: '' - } - }, - initialize: function initialize(map, overlay, options) { - this._overlay = overlay; - this._map = map; - L.setOptions(this, options); - L.Toolbar2.Action.prototype.initialize.call(this, options); - - this._injectIconSet(); - }, - _createIcon: function _createIcon(toolbar, container, args) { - var _this = this; - - var iconOptions = this.options.toolbarIcon; - var className = iconOptions.className; - var edit = this._overlay.editing; - this.toolbar = toolbar; - this._icon = L.DomUtil.create('li', '', container); - this._link = L.DomUtil.create('a', '', this._icon); - - if (iconOptions.svg) { - this._link.innerHTML = L.IconUtil.create(iconOptions.html); - } else { - this._link.innerHTML = iconOptions.html; - } - - this._link.setAttribute('href', '#'); - - this._link.setAttribute('title', iconOptions.tooltip); - - this._link.setAttribute('role', 'button'); - - L.DomUtil.addClass(this._link, this.constructor.baseClass); - - if (className) { - L.DomUtil.addClass(this._link, className); - - if (className === 'disabled') { - L.DomUtil.addClass(this._icon, className); - } - - if (className === edit._mode) { - L.DomUtil.addClass(this._link, 'selected-mode'); - } else { - L.DomUtil.removeClass(this._link, 'selected-mode'); - } - } - - L.DomEvent.on(this._link, 'click', this.enable, this); - L.DomEvent.on(this._overlay, 'update', function () { - var match = _this._link.innerHTML.match(/xlink:href="#restore"/); - - if (match && match.length === 1) { - _this._enableAction(); - } - }); - /* Add secondary toolbar */ - - this._addSubToolbar(toolbar, this._icon, args); - }, - _injectIconSet: function _injectIconSet() { - if (document.querySelector('#iconset')) { - return; - } - - var el = document.createElement('div'); - el.id = 'iconset'; - el.setAttribute('hidden', 'hidden'); - el.innerHTML = new L.ToolbarIconSet().render(); - document.querySelector('.leaflet-marker-pane').appendChild(el); - }, - _enableAction: function _enableAction() { - L.DomUtil.removeClass(this._link.parentElement, 'disabled'); - L.DomUtil.removeClass(this._link, 'disabled'); - }, - _disableAction: function _disableAction() { - L.DomUtil.addClass(this._link.parentElement, 'disabled'); - L.DomUtil.addClass(this._link, 'disabled'); - } -}); - -L.editAction = function (map, overlay, options) { - return new L.EditAction(map, overlay, options); -}; - -/***/ }), - -/***/ "./src/edit/actions/ExportAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/ExportAction.js ***! - \******************************************/ -/***/ (function() { - -L.ExportAction = L.EditAction.extend({ - // This function is executed every time we select an image - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var tooltip; - this.isExporting = false; - this.mouseLeaveSkip = true; - this.isHooksExecuted = false; - - if (edit instanceof L.DistortableImage.Edit) { - L.DistortableImage.action_map.e = '_getExport'; - tooltip = overlay.options.translation.exportImage; - } else { - L.DistortableImage.group_action_map.e = 'runExporter'; - tooltip = overlay.options.translation.exportImages; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'get_app', - tooltip: tooltip - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - if (edit instanceof L.DistortableImage.Edit) { - edit._getExport(); - - return; - } // Make sure that addHooks is executed only once, event listeners will handle the rest - - - if (this.isHooksExecuted) { - return; - } else { - this.isHooksExecuted = true; - } - - var exportTool = this._link.parentElement; - this.mouseEnterHandler = this.handleMouseEnter.bind(this); - this.mouseLeaveHandler = this.handleMouseLeave.bind(this); - L.DomEvent.on(exportTool, 'click', function () { - if (!this.isExporting) { - this.isExporting = true; - this.renderExportIcon(); - setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100); - edit.runExporter().then(function () { - this.resetState(); - this.detachMouseEventListeners(exportTool); - }.bind(this)); - } else { - // Clicking on the export icon after export has started will be ignored - if (this.mouseLeaveSkip) { - return; - } - - this.resetState(); - this.detachMouseEventListeners(exportTool); - edit.cancelExport(); - } - }, this); - }, - resetState: function resetState() { - this.renderDownloadIcon(); - this.isExporting = false; - this.mouseLeaveSkip = true; - }, - attachMouseEventListeners: function attachMouseEventListeners(element) { - element.addEventListener('mouseenter', this.mouseEnterHandler); - element.addEventListener('mouseleave', this.mouseLeaveHandler); - }, - detachMouseEventListeners: function detachMouseEventListeners(element) { - element.removeEventListener('mouseenter', this.mouseEnterHandler); - element.removeEventListener('mouseleave', this.mouseLeaveHandler); - }, - handleMouseEnter: function handleMouseEnter() { - this.renderCancelIcon(); - }, - handleMouseLeave: function handleMouseLeave() { - if (!this.mouseLeaveSkip) { - this.renderExportIcon(); - } else { - this.mouseLeaveSkip = false; - } - }, - renderDownloadIcon: function renderDownloadIcon() { - 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 renderExportIcon() { - L.IconUtil.toggleXlink(this._link, 'spinner'); - L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...'); - L.IconUtil.addClassToSvg(this._link, 'loader'); - }, - renderCancelIcon: function renderCancelIcon() { - L.IconUtil.toggleXlink(this._link, 'cancel'); - L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...'); - L.DomUtil.removeClass(this._link.firstChild, 'loader'); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/FreeRotateAction.js": -/*!**********************************************!*\ - !*** ./src/edit/actions/FreeRotateAction.js ***! - \**********************************************/ -/***/ (function() { - -L.FreeRotateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'crop_rotate', - tooltip: overlay.options.translation.freeRotateImage, - className: 'freeRotate' - }; - L.DistortableImage.action_map.f = '_freeRotateMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._freeRotateMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/GeolocateAction.js": -/*!*********************************************!*\ - !*** ./src/edit/actions/GeolocateAction.js ***! - \*********************************************/ -/***/ (function() { - -L.GeolocateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'explore', - tooltip: overlay.options.translation.geolocateImage, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var image = this._overlay.getElement(); - - EXIF.getData(image, L.EXIF(image)); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/LockAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/LockAction.js ***! - \****************************************/ -/***/ (function() { - -L.LockAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use; - var tooltip; - - if (edit instanceof L.DistortableImage.Edit) { - L.DistortableImage.action_map.u = '_unlock'; - L.DistortableImage.action_map.l = '_lock'; - tooltip = overlay.options.translation.lockMode; - use = edit.isMode('lock') ? 'lock' : 'unlock'; - } else { - L.DistortableImage.group_action_map.l = '_lockGroup'; - tooltip = overlay.options.translation.lockImages; - use = 'lock'; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: 'lock' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - if (edit instanceof L.DistortableImage.Edit) { - edit._toggleLockMode(); - } else { - edit._lockGroup(); - } - } -}); - -/***/ }), - -/***/ "./src/edit/actions/OpacityAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/OpacityAction.js ***! - \*******************************************/ -/***/ (function() { - -L.OpacityAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var mode = edit._mode; - var use; - var tooltip; - - if (edit._transparent) { - use = 'opacity_empty'; - tooltip = overlay.options.translation.makeImageOpaque; - } else { - use = 'opacity'; - tooltip = overlay.options.translation.makeImageTransparent; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: mode === 'lock' ? 'disabled' : '' - }; - L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - var link = this._link; - L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty'); - L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); - - edit._toggleOpacity(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/RestoreAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/RestoreAction.js ***! - \*******************************************/ -/***/ (function() { - -L.RestoreAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var mode = L.Utils.getNestedVal(overlay, 'editing', '_mode'); - var edited = overlay.edited; - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'restore', - tooltip: overlay.options.translation.restoreImage, - className: edited && mode !== 'lock' ? '' : 'disabled' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var ov = this._overlay; - L.DomEvent.on(ov, { - edit: this._enableAction, - restore: this._disableAction - }, this); - ov.restore(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/RotateAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/RotateAction.js ***! - \******************************************/ -/***/ (function() { - -L.RotateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'rotate', - tooltip: overlay.options.translation.rotateImage, - className: 'rotate' - }; - L.DistortableImage.action_map.r = '_rotateMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._rotateMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/ScaleAction.js": -/*!*****************************************!*\ - !*** ./src/edit/actions/ScaleAction.js ***! - \*****************************************/ -/***/ (function() { - -L.ScaleAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'scale', - tooltip: overlay.options.translation.scaleImage, - className: 'scale' - }; - L.DistortableImage.action_map.s = '_scaleMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._scaleMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/StackAction.js": -/*!*****************************************!*\ - !*** ./src/edit/actions/StackAction.js ***! - \*****************************************/ -/***/ (function() { - -L.StackAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use; - var tooltip; - - if (edit._toggledImage) { - use = 'flip_to_back'; - tooltip = overlay.options.translation.stackToFront; - } else { - use = 'flip_to_front'; - tooltip = overlay.options.translation.stackToBack; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp'; - L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back'); - L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back'); - - edit._toggleOrder(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/UnlockAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/UnlockAction.js ***! - \******************************************/ -/***/ (function() { - -L.UnlockAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'unlock', - tooltip: overlay.options.translation.unlockImages - }; - L.DistortableImage.group_action_map.u = '_unlockGroup'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._unlockGroup(); - } -}); - -/***/ }), - -/***/ "./src/edit/getEXIFdata.js": -/*!*********************************!*\ - !*** ./src/edit/getEXIFdata.js ***! - \*********************************/ -/***/ (function() { - -/* eslint-disable no-unused-vars */ -L.EXIF = function getEXIFdata(img) { - if (Object.keys(EXIF.getAllTags(img)).length !== 0) { - console.log(EXIF.getAllTags(img)); - var GPS = EXIF.getAllTags(img); - var altitude; - /* If the lat/lng is available. */ - - if (typeof GPS.GPSLatitude !== 'undefined' && typeof GPS.GPSLongitude !== 'undefined') { - // sadly, encoded in [degrees,minutes,seconds] - // primitive value = GPS.GPSLatitude[x].numerator - var lat = GPS.GPSLatitude[0] + GPS.GPSLatitude[1] / 60 + GPS.GPSLatitude[2] / 3600; - var lng = GPS.GPSLongitude[0] + GPS.GPSLongitude[1] / 60 + GPS.GPSLongitude[2] / 3600; - - if (GPS.GPSLatitudeRef !== 'N') { - lat = lat * -1; - } - - if (GPS.GPSLongitudeRef === 'W') { - lng = lng * -1; - } - } // Attempt to use GPS compass heading; will require - // some trig to calc corner points, which you can find below: - - - var angle = 0; // "T" refers to "True north", so -90. - - if (GPS.GPSImgDirectionRef === 'T') { - angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); // "M" refers to "Magnetic north" - } else if (GPS.GPSImgDirectionRef === 'M') { - angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); - } else { - console.log('No compass data found'); - } - - console.log('Orientation:', GPS.Orientation); - /* If there is orientation data -- i.e. landscape/portrait etc */ - - if (GPS.Orientation === 6) { - // CCW - angle += Math.PI / 180 * -90; - } else if (GPS.Orientation === 8) { - // CW - angle += Math.PI / 180 * 90; - } else if (GPS.Orientation === 3) { - // 180 - angle += Math.PI / 180 * 180; - } - /* If there is altitude data */ - - - if (typeof GPS.GPSAltitude !== 'undefined' && typeof GPS.GPSAltitudeRef !== 'undefined') { - // Attempt to use GPS altitude: - // (may eventually need to find EXIF field of view for correction) - if (typeof GPS.GPSAltitude !== 'undefined' && typeof GPS.GPSAltitudeRef !== 'undefined') { - altitude = GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator + GPS.GPSAltitudeRef; - } else { - altitude = 0; // none - } - } - } else { - alert('EXIF initialized. Press again to view data in console.'); - } -}; - -/***/ }), - -/***/ "./src/edit/handles/DistortHandle.js": -/*!*******************************************!*\ - !*** ./src/edit/handles/DistortHandle.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortHandle = L.EditHandle.extend({ - options: { - TYPE: 'distort', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - overlay.setCorner(this._corner, this.getLatLng()); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.distortHandle = function (overlay, idx, options) { - return new L.DistortHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/DragHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/DragHandle.js ***! - \****************************************/ -/***/ (function() { - -L.DragHandle = L.EditHandle.extend({ - options: { - TYPE: 'drag', - icon: L.icon({ - // eslint-disable-next-line max-len - 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=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - overlay.dragBy(formerLatLng, newLatLng); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.dragHandle = function (overlay, idx, options) { - return new L.DragHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/EditHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/EditHandle.js ***! - \****************************************/ -/***/ (function() { - -L.EditHandle = L.Marker.extend({ - initialize: function initialize(overlay, corner, options) { - var latlng = overlay.getCorner(corner); - L.setOptions(this, options); - this._handled = overlay; - this._corner = corner; - var markerOptions = { - draggable: true, - zIndexOffset: 10 - }; - - if (options && options.hasOwnProperty('draggable')) { - markerOptions.draggable = options.draggable; - } - - L.Marker.prototype.initialize.call(this, latlng, markerOptions); - }, - onAdd: function onAdd(map) { - L.Marker.prototype.onAdd.call(this, map); - - this._bindListeners(); - - this.updateHandle(); - }, - onRemove: function onRemove(map) { - this._unbindListeners(); - - L.Marker.prototype.onRemove.call(this, map); - }, - _onHandleDragStart: function _onHandleDragStart() { - this._handled.fire('editstart'); - }, - _onHandleDragEnd: function _onHandleDragEnd() { - this._fireEdit(); - }, - _fireEdit: function _fireEdit() { - this._handled.edited = true; - - this._handled.fire('edit'); - }, - _bindListeners: function _bindListeners() { - this.on({ - contextmenu: L.DomEvent.stop, - dragstart: this._onHandleDragStart, - drag: this._onHandleDrag, - dragend: this._onHandleDragEnd - }, this); - - this._handled._map.on('zoomend', this.updateHandle, this); - - this._handled.on('update', this.updateHandle, this); - }, - _unbindListeners: function _unbindListeners() { - this.off({ - contextmenu: L.DomEvent.stop, - dragstart: this._onHandleDragStart, - drag: this._onHandleDrag, - dragend: this._onHandleDragEnd - }, this); - - this._handled._map.off('zoomend', this.updateHandle, this); - - this._handled.off('update', this.updateHandle, this); - }, - - /* Takes two latlngs and calculates the scaling difference. */ - _calculateScalingFactor: function _calculateScalingFactor(latlngA, latlngB) { - var overlay = this._handled; - var map = overlay._map; - var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); - var formerPoint = map.latLngToLayerPoint(latlngA); - var newPoint = map.latLngToLayerPoint(latlngB); - - var formerRadiusSquared = this._d2(centerPoint, formerPoint); - - var newRadiusSquared = this._d2(centerPoint, newPoint); - - return Math.sqrt(newRadiusSquared / formerRadiusSquared); - }, - - /* Distance between two points in cartesian space, squared (distance formula). */ - _d2: function _d2(a, b) { - var dx = a.x - b.x; - var dy = a.y - b.y; - return Math.pow(dx, 2) + Math.pow(dy, 2); - }, - - /* Takes two latlngs and calculates the angle between them. */ - calculateAngleDelta: function calculateAngleDelta(latlngA, latlngB) { - var overlay = this._handled; - var map = overlay._map; - var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); - var formerPoint = map.latLngToLayerPoint(latlngA); - var newPoint = map.latLngToLayerPoint(latlngB); - var initialAngle = Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x); - var newAngle = Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x); - return newAngle - initialAngle; - } -}); - -/***/ }), - -/***/ "./src/edit/handles/FreeRotateHandle.js": -/*!**********************************************!*\ - !*** ./src/edit/handles/FreeRotateHandle.js ***! - \**********************************************/ -/***/ (function() { - -L.FreeRotateHandle = L.EditHandle.extend({ - options: { - TYPE: 'freeRotate', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - '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 _onHandleDrag() { - var overlay = this._handled; - var map = overlay._map; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - var angle = this.calculateAngleDelta(formerLatLng, newLatLng); - - var scale = this._calculateScalingFactor(formerLatLng, newLatLng); - - if (angle !== 0) { - overlay.rotateBy(angle, 'rad'); - } - - var edgeMinWidth = overlay.edgeMinWidth; - - if (!edgeMinWidth) { - edgeMinWidth = 50; - } - /* just in case */ - - - var corner1 = map.latLngToContainerPoint(overlay.getCorner(0)); - var corner2 = map.latLngToContainerPoint(overlay.getCorner(1)); - var w = Math.abs(corner1.x - corner2.x); - var h = Math.abs(corner1.y - corner2.y); - var distance = Math.sqrt(w * w + h * h); - - if (distance > edgeMinWidth || scale > 1) { - overlay.scaleBy(scale); - } else { - overlay.scaleBy(1); - } - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.freeRotateHandle = function (overlay, idx, options) { - return new L.FreeRotateHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/LockHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/LockHandle.js ***! - \****************************************/ -/***/ (function() { - -L.LockHandle = L.EditHandle.extend({ - options: { - TYPE: 'lock', - interactive: false, - icon: L.icon({ - // eslint-disable-next-line max-len - iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - onRemove: function onRemove(map) { - this.unbindTooltip(); - L.EditHandle.prototype.onRemove.call(this, map); - }, - _bindListeners: function _bindListeners() { - var icon = this.getElement(); - - L.EditHandle.prototype._bindListeners.call(this); - - L.DomEvent.on(icon, { - mousedown: this._tooltipOn, - mouseup: this._tooltipOff - }, this); - L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this); - }, - _unbindListeners: function _unbindListeners() { - var icon = this.getElement(); - - L.EditHandle.prototype._bindListeners.call(this); - - L.DomEvent.off(icon, { - mousedown: this._tooltipOn, - mouseup: this._tooltipOff - }, this); - L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this); - }, - - /* cannot be dragged */ - _onHandleDrag: function _onHandleDrag() {}, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - }, - _tooltipOn: function _tooltipOn(e) { - var eP = this._handled.parentGroup; - var edit = eP ? eP.editing : this._handled.editing; - - if (e.shiftKey) { - return; - } - - if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { - return; - } - - var handlesArr = edit._lockHandles; - this._timer = setTimeout(L.bind(function () { - if (this._timeout) { - clearTimeout(this._timeout); - } - - if (!this.getTooltip()) { - this.bindTooltip('Locked!', { - permanent: true - }); - } else { - handlesArr.eachLayer(function (handle) { - if (this !== handle) { - handle.closeTooltip(); - } - }); - } - - this.openTooltip(); - }, this), 500); - }, - _tooltipOff: function _tooltipOff(e) { - var eP = this._handled.parentGroup; - var edit = eP ? eP.editing : this._handled.editing; - - if (e.shiftKey) { - return; - } - - if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { - return; - } - - var handlesArr = edit._lockHandles; - - if (e.currentTarget === document) { - handlesArr.eachLayer(function (handle) { - handle.closeTooltip(); - }); - } - - if (this._timer) { - clearTimeout(this._timer); - } - - this._timeout = setTimeout(L.bind(function () { - this.closeTooltip(); - }, this), 400); - } -}); - -L.lockHandle = function (overlay, idx, options) { - return new L.LockHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/RotateHandle.js": -/*!******************************************!*\ - !*** ./src/edit/handles/RotateHandle.js ***! - \******************************************/ -/***/ (function() { - -L.RotateHandle = L.EditHandle.extend({ - options: { - TYPE: 'rotate', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - '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 _onHandleDrag() { - var overlay = this._handled; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - var angle = this.calculateAngleDelta(formerLatLng, newLatLng); - /* - * running rotation logic even for an angle delta of 0 - * prevents a small, occasional marker flicker - */ - - overlay.rotateBy(angle, 'rad'); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.rotateHandle = function (overlay, idx, options) { - return new L.RotateHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/ScaleHandle.js": -/*!*****************************************!*\ - !*** ./src/edit/handles/ScaleHandle.js ***! - \*****************************************/ -/***/ (function() { - -L.ScaleHandle = L.EditHandle.extend({ - options: { - TYPE: 'scale', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - var map = overlay._map; - var edgeMinWidth = overlay.edgeMinWidth; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - - var scale = this._calculateScalingFactor(formerLatLng, newLatLng); - /* - * checks whether the "edgeMinWidth" property is set and tracks the minimum edge length; - * this enables preventing scaling to zero, but we might also add an overall scale limit - */ - - - if (!edgeMinWidth) { - edgeMinWidth = 50; - } - /* just in case */ - - - var corner1 = map.latLngToLayerPoint(overlay.getCorner(0)); - var corner2 = map.latLngToLayerPoint(overlay.getCorner(1)); - var w = Math.abs(corner1.x - corner2.x); - var h = Math.abs(corner1.y - corner2.y); - var distance = Math.sqrt(w * w + h * h); - - if (distance > edgeMinWidth || scale > 1) { - overlay.scaleBy(scale); - /* - * running scale logic even for a scale ratio of 1 - * prevents a small, occasional marker flicker - */ - } else { - overlay.scaleBy(1); - } - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.scaleHandle = function (overlay, idx, options) { - return new L.ScaleHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/toolbars/DistortableImage.ControlBar.js": -/*!**********************************************************!*\ - !*** ./src/edit/toolbars/DistortableImage.ControlBar.js ***! - \**********************************************************/ -/***/ (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 (options) { - return new L.DistortableImage.ControlBar(options); -}; -/** addInitHooks run before onAdd */ - - -L.DistortableCollection.addInitHook(function () { - /** Default actions */ - this.ACTIONS = [L.ExportAction, L.DeleteAction, L.LockAction, L.UnlockAction]; // all possible modes - - L.DistortableCollection.Edit.MODES = { - lock: L.LockAction, - unlock: L.UnlockAction - }; - var a = this.options.actions ? this.options.actions : this.ACTIONS; - this.editing = L.distortableCollection.edit(this, { - actions: a - }); -}); - -/***/ }), - -/***/ "./src/edit/toolbars/DistortableImage.PopupBar.js": -/*!********************************************************!*\ - !*** ./src/edit/toolbars/DistortableImage.PopupBar.js ***! - \********************************************************/ -/***/ (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 initialize(latlng, options) { - L.setOptions(this, options); - L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options); - }, - addHooks: function addHooks(map, ov) { - this.map = map; - this.ov = ov; - }, - tools: function tools() { - if (this._ul) { - return this._ul.children; - } - }, - clickTool: function clickTool(name) { - var tools = this.tools(); - - for (var i = 0; i < tools.length; i++) { - var tool = tools.item(i).children[0]; - - if (L.DomUtil.hasClass(tool, name)) { - tool.click(); - return tool; - } - } - - return false; - } -}); - -L.distortableImage.popupBar = function (latlng, options) { - return new L.DistortableImage.PopupBar(latlng, options); -}; - -L.DistortableImageOverlay.addInitHook(function () { - /** Default actions */ - this.ACTIONS = [L.DragAction, L.ScaleAction, L.DistortAction, L.RotateAction, L.FreeRotateAction, L.LockAction, L.OpacityAction, L.BorderAction, L.ExportAction, L.DeleteAction]; // all possible modes - - L.DistortableImage.Edit.MODES = { - drag: L.DragAction, - scale: L.ScaleAction, - distort: L.DistortAction, - rotate: L.RotateAction, - freeRotate: L.FreeRotateAction, - lock: L.LockAction - }; - var a = this.options.actions ? this.options.actions : this.ACTIONS; - this.editing = L.distortableImage.edit(this, { - actions: a - }); -}); - -/***/ }), - -/***/ "./src/iconsets/IconSet.js": -/*!*********************************!*\ - !*** ./src/iconsets/IconSet.js ***! - \*********************************/ -/***/ (function() { - -/* this is the baseclass other IconSets inherit from, -* we don't use it directly */ -L.IconSet = L.Class.extend({ - _svg: '', - _symbols: '', - render: function render() { - this.addSymbols(this._symbols); - return this._svg; - }, - addSymbols: function addSymbols(symbols) { - this._svg += symbols; - } -}); - -/***/ }), - -/***/ "./src/iconsets/KeymapperIconSet.js": -/*!******************************************!*\ - !*** ./src/iconsets/KeymapperIconSet.js ***! - \******************************************/ -/***/ (function() { - -L.KeymapperIconSet = L.IconSet.extend({ - _symbols: // eslint-disable-next-line max-len - '' -}); - -/***/ }), - -/***/ "./src/iconsets/ToolbarIconSet.js": -/*!****************************************!*\ - !*** ./src/iconsets/ToolbarIconSet.js ***! - \****************************************/ -/***/ (function() { - -/* eslint-disable max-len */ -L.ToolbarIconSet = L.IconSet.extend({ - _symbols: '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' -}); - -/***/ }), - -/***/ "./src/mapmixins/BoxCollector.js": -/*!***************************************!*\ - !*** ./src/mapmixins/BoxCollector.js ***! - \***************************************/ -/***/ (function() { - -L.Map.mergeOptions({ - boxCollector: true, - boxZoom: false -}); -/** - * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with - * our `L.DistortableCollection` class instead of a zoom box. - * */ - -L.Map.BoxCollector = L.Map.BoxZoom.extend({ - initialize: function initialize(map) { - this._map = map; - this._container = map._container; - this._pane = map._panes.overlayPane; - this._resetStateTimeout = 0; - map.on('unload', this._destroy, this); - }, - addHooks: function addHooks() { - L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this); - }, - removeHooks: function removeHooks() { - L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this); - }, - moved: function moved() { - return this._moved; - }, - _destroy: function _destroy() { - L.DomUtil.remove(this._pane); - delete this._pane; - }, - _resetState: function _resetState() { - this._resetStateTimeout = 0; - this._moved = false; - }, - _clearDeferredResetState: function _clearDeferredResetState() { - if (this._resetStateTimeout !== 0) { - clearTimeout(this._resetStateTimeout); - this._resetStateTimeout = 0; - } - }, - _onMouseDown: function _onMouseDown(e) { - if (!e.shiftKey || e.which !== 1 && e.button !== 1) { - return false; - } // Clear the deferred resetState if it hasn't executed yet, otherwise it - // will interrupt the interaction and orphan a box element in the container. - - - this._clearDeferredResetState(); - - this._resetState(); - - L.DomUtil.disableTextSelection(); - L.DomUtil.disableImageDrag(); - this._startPoint = this._map.mouseEventToContainerPoint(e); - L.DomEvent.on(document, { - contextmenu: L.DomEvent.stop, - mousemove: this._onMouseMove, - mouseup: this._onMouseUp - }, this); - }, - _onMouseMove: function _onMouseMove(e) { - if (!this._moved) { - this._moved = true; - 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(e); - this._bounds = L.bounds(this._startPoint, this._point); - - var size = this._bounds.getSize(); - - L.DomUtil.setPosition(this._box, this._bounds.min); - this._box.style.width = size.x + 'px'; - this._box.style.height = size.y + 'px'; - }, - _finish: function _finish() { - if (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 _onMouseUp(e) { - if (e.which !== 1 && e.button !== 1) { - return; - } - - this._finish(); - - if (!this._moved) { - return; - } // Postpone to next JS tick so internal click event handling - // still see it as "moved". - - - this._clearDeferredResetState(); - - this._resetStateTimeout = setTimeout(L.Util.bind(this._resetState, this), 0); - var bounds = L.latLngBounds(this._map.containerPointToLatLng(this._bounds.getBottomLeft()), this._map.containerPointToLatLng(this._bounds.getTopRight())); - - var zoom = this._map.getZoom(); - - var center = this._map.getCenter(); // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344 - - - bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center); - - this._map.fire('boxcollectend', { - boxCollectBounds: bounds - }); - } -}); -L.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector); - -/***/ }), - -/***/ "./src/mapmixins/DoubleClickLabels.js": -/*!********************************************!*\ - !*** ./src/mapmixins/DoubleClickLabels.js ***! - \********************************************/ -/***/ (function() { - -L.Map.mergeOptions({ - doubleClickLabels: true -}); -/** - * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant` - * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it. - */ - -L.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({ - enable: function enable() { - var map = this._map; - - if (this._enabled) { - return this; - } // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled. - - - if (map.doubleClickZoom.enabled()) { - map.doubleClickZoom.disable(); - } - - this._map.fire('singleclickon'); - - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - if (!this._enabled) { - return this; - } - - this._enabled = false; - this.removeHooks(); - return this; - }, - _fireIfSingle: function _fireIfSingle(e) { - var map = this._map; - var oe = e.originalEvent; // prevents deselection in case of box selector - - if (oe && oe.shiftKey) { - return; - } - - map._clicked += 1; - this._map._clickTimeout = setTimeout(function () { - if (map._clicked === 1) { - map._clicked = 0; - map.fire('singleclick', { - type: 'singleclick' - }); - } else { - // manually fire doubleclick event only for touch screens that don't natively fire it - if (L.Browser.touch && oe && oe.sourceCapabilities.firesTouchEvents) { - map.fire('dblclick'); - } - } - }, 250); - }, - _onDoubleClick: function _onDoubleClick() { - var map = this._map; - var labels = map._labels; - setTimeout(function () { - map._clicked = 0; - clearTimeout(map._clickTimeout); - }, 0); - - if (!labels) { - return; - } - - if (labels.options.opacity === 1) { - labels.options.opacity = 0; - labels.setOpacity(0); - } else { - labels.options.opacity = 1; - labels.setOpacity(1); - } - } -}); -L.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels); - -/***/ }), - -/***/ "./src/mapmixins/DoubleClickZoom.js": -/*!******************************************!*\ - !*** ./src/mapmixins/DoubleClickZoom.js ***! - \******************************************/ -/***/ (function() { - -/** - * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it - * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`. - * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler - */ -L.Map.DoubleClickZoom.include({ - addHooks: function addHooks() { - this._map.on({ - click: this._fireIfSingle, - dblclick: this._onDoubleClick - }, this); - }, - removeHooks: function removeHooks() { - this._map.off({ - click: this._fireIfSingle, - dblclick: this._onDoubleClick - }, this); - }, - enable: function enable() { - if (this._enabled) { - return this; - } // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first - - - if (this._map.doubleClickLabels) { - if (this._map.doubleClickLabels.enabled()) { - return this; - } - } // signify to collection/instance classes to turn on 'singleclick' listeners - - - this._map.fire('singleclickon'); - - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - if (!this._enabled) { - return this; - } // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners. - - - this._map.fire('singleclickoff'); - - this._enabled = false; - this.removeHooks(); - return this; - }, - _fireIfSingle: function _fireIfSingle(e) { - var map = this._map; - var oe = e.originalEvent; // prevents deselection in case of box selector - - if (oe && oe.shiftKey) { - return; - } - - map._clicked += 1; - this._map._clickTimeout = setTimeout(function () { - if (map._clicked === 1) { - map._clicked = 0; - map.fire('singleclick', { - type: 'singleclick' - }); - } else { - // manually fire doubleclick event only for touch screens that don't natively fire it - if (L.Browser.touch && oe && oe.sourceCapabilities.firesTouchEvents) { - /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the - passed "e" (for now). To generate a 'real' DOM event that will have all of its corresponding core - properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */ - map._fireDOMEvent(oe, 'dblclick', [map]); - } - } - }, 250); - }, - _onDoubleClick: function _onDoubleClick(e) { - var map = this._map; - var oe = e.originalEvent; - setTimeout(function () { - map._clicked = 0; - clearTimeout(map._clickTimeout); - }, 0); - - if (!oe) { - return false; - } - - var oldZoom = map.getZoom(); - var delta = map.options.zoomDelta; - var zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta; - - if (map.options.doubleClickZoom === 'center') { - map.setZoom(zoom); - } else { - map.setZoomAround(e.containerPoint, zoom); - } - } -}); - -/***/ }), - -/***/ "./src/mapmixins/MapMixins.js": -/*!************************************!*\ - !*** ./src/mapmixins/MapMixins.js ***! - \************************************/ -/***/ (function() { - -/* eslint-disable max-len */ -L.Map.include({ - _clicked: 0, - addGoogleMutant: function addGoogleMutant(opts) { - var url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}'; - opts = this.mutantOptions = L.extend({ - mutantOpacity: 0.8, - maxZoom: 24, - maxNativeZoom: 20, - minZoom: 0, - labels: true, - labelOpacity: 1, - doubleClickLabels: true - }, opts); - - if (!opts.labels) { - this.mutantOptions = L.extend(this.mutantOptions, { - labelOpacity: opts.labels ? 1 : undefined, - doubleClickLabels: opts.labels ? true : undefined - }); - } - - this._googleMutant = L.tileLayer(url, { - maxZoom: opts.maxZoom, - maxNativeZoom: opts.maxNativeZoom, - minZoom: opts.minZoom, - opacity: opts.mutantOpacity - }).addTo(this); - - if (opts.labels) { - this._addLabels(opts); - } // shouldn't have this handler at all if there are no labels to toggle - else { - this.doubleClickLabels = undefined; - } - - return this; - }, - _addLabels: function _addLabels(opts) { - var url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}'; - - if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) { - opts.labelOpacity = 1; - } - - this._labels = L.tileLayer(url, { - attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors', - subdomains: 'abcd', - interactive: false, - opacity: opts.labelOpacity, - maxZoom: opts.maxZoom, - maxNativeZoom: opts.maxNativeZoom, - minZoom: opts.minZoom, - ext: 'png' - }).addTo(this); - - if (this.mutantOptions.doubleClickLabels) { - this.doubleClickLabels.enable(); - } - - return this; - } -}); // start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead -// during initialization - -L.Map.addInitHook(function () { - this.doubleClickLabels.disable(); - this.doubleClickZoom.enable(); -}); - -/***/ }), - -/***/ "./src/util/DomUtil.js": -/*!*****************************!*\ - !*** ./src/util/DomUtil.js ***! - \*****************************/ -/***/ (function() { - -L.DomUtil = L.extend(L.DomUtil, { - initTranslation: function initTranslation(obj) { - this.translation = obj; - }, - getMatrixString: function getMatrixString(m) { - var is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d; - /* - * Since matrix3d takes a 4*4 matrix, we add in an empty row and column, - * which act as the identity on the z-axis. - * See: - * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ - * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry - */ - - var matrix = [m[0], m[3], 0, m[6], m[1], m[4], 0, m[7], 0, 0, 1, 0, m[2], m[5], 0, m[8]]; - var str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : ''; - - if (!is3d) { - console.log('Your browser must support 3D CSS transforms' + 'in order to use DistortableImageOverlay.'); - } - - return str; - }, - toggleClass: function toggleClass(el, className) { - var c = className; - return this.hasClass(el, c) ? this.removeClass(el, c) : this.addClass(el, c); - }, - confirmDelete: function confirmDelete() { - return window.confirm(this.translation.confirmImageDelete); - }, - confirmDeletes: function confirmDeletes(n) { - if (n === 1) { - return this.confirmDelete(); - } - - var translation = this.translation.confirmImagesDeletes; - var warningMsg = ''; - - if (typeof translation === 'function') { - warningMsg = translation(n); - } else { - warningMsg = translation; - } - - return window.confirm(warningMsg); - } -}); - -/***/ }), - -/***/ "./src/util/IconUtil.js": -/*!******************************!*\ - !*** ./src/util/IconUtil.js ***! - \******************************/ -/***/ (function() { - -L.IconUtil = { - /* creates an svg elemenet with built in accessibility properties - * and standardized classes for styling, takes in the fragment - * identifier (id) of the symbol to reference. note for symplicity - * we allow providing the icon target with or without the '#' prefix - */ - create: function create(ref) { - if (/^#/.test(ref)) { - ref = ref.replace(/^#/, ''); - } - - return '' + '' + ''; - }, - addClassToSvg: function addClassToSvg(container, loader) { - var svg = container.querySelector('svg'); - - if (svg) { - L.DomUtil.addClass(svg, loader); - } - }, - // finds the use element and toggles its icon reference - toggleXlink: function toggleXlink(container, ref1, ref2) { - if (!/^#/.test(ref1)) { - ref1 = '#' + ref1; - } - - if (!/^#/.test(ref2)) { - ref2 = '#' + ref2; - } - - var use = container.querySelector('use'); - - if (use) { - var toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1; - use.setAttribute('xlink:href', toggled); - return toggled; - } - - return false; - }, - toggleTitle: function toggleTitle(container, title1, title2) { - var toggled = container.getAttribute('title') === title1 ? title2 : title1; - container.setAttribute('title', toggled); - - if (container.hasAttribute('aria-label')) { - container.setAttribute('aria-label', toggled); - } - - return toggled; - } -}; - -/***/ }), - -/***/ "./src/util/ImageUtil.js": -/*!*******************************!*\ - !*** ./src/util/ImageUtil.js ***! - \*******************************/ -/***/ (function() { - -L.ImageUtil = { - getCmPerPixel: function getCmPerPixel(overlay) { - var map = overlay._map; - var dist = map.latLngToLayerPoint(overlay.getCorner(0)).distanceTo(map.latLngToLayerPoint(overlay.getCorner(1))); - return dist * 100 / overlay.getElement().width; - } -}; - -/***/ }), - -/***/ "./src/util/MatrixUtil.js": -/*!********************************!*\ - !*** ./src/util/MatrixUtil.js ***! - \********************************/ -/***/ (function() { - -L.MatrixUtil = { - // Compute the adjugate of m - adj: function adj(m) { - return [m[4] * m[8] - m[5] * m[7], m[2] * m[7] - m[1] * m[8], m[1] * m[5] - m[2] * m[4], m[5] * m[6] - m[3] * m[8], m[0] * m[8] - m[2] * m[6], m[2] * m[3] - m[0] * m[5], m[3] * m[7] - m[4] * m[6], m[1] * m[6] - m[0] * m[7], m[0] * m[4] - m[1] * m[3]]; - }, - // multiply two 3*3 matrices - multmm: function multmm(a, b) { - var c = []; - var i; - - for (i = 0; i < 3; i++) { - for (var j = 0; j < 3; j++) { - var cij = 0; - - for (var k = 0; k < 3; k++) { - cij += a[3 * i + k] * b[3 * k + j]; - } - - c[3 * i + j] = cij; - } - } - - return c; - }, - // multiply a 3*3 matrix and a 3-vector - multmv: function multmv(m, v) { - return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; - }, - // multiply a scalar and a 3*3 matrix - multsm: function multsm(s, m) { - var matrix = []; - - for (var i = 0, l = m.length; i < l; i++) { - matrix.push(s * m[i]); - } - - return matrix; - }, - basisToPoints: function basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) { - var m = [x1, x2, x3, y1, y2, y3, 1, 1, 1]; - var v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]); - return L.MatrixUtil.multmm(m, [v[0], 0, 0, 0, v[1], 0, 0, 0, v[2]]); - }, - project: function project(m, x, y) { - var v = L.MatrixUtil.multmv(m, [x, y, 1]); - return [v[0] / v[2], v[1] / v[2]]; - }, - general2DProjection: function general2DProjection(x1s, y1s, x1d, y1d, x2s, y2s, x2d, y2d, x3s, y3s, x3d, y3d, x4s, y4s, x4d, y4d) { - var s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s); - var d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d); - var m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s)); // Normalize to the unique matrix with m[8] == 1. - // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ - - return L.MatrixUtil.multsm(1 / m[8], m); - } -}; - -/***/ }), - -/***/ "./src/util/TrigUtil.js": -/*!******************************!*\ - !*** ./src/util/TrigUtil.js ***! - \******************************/ -/***/ (function() { - -L.TrigUtil = { - calcAngle: function calcAngle(x, y) { - var unit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'deg'; - return unit === 'deg' ? this.radiansToDegrees(Math.atan2(y, x)) : Math.atan2(y, x); - }, - radiansToDegrees: function radiansToDegrees(angle) { - return angle * 180 / Math.PI; - }, - degreesToRadians: function degreesToRadians(angle) { - return angle * Math.PI / 180; - } -}; - -/***/ }), - -/***/ "./src/util/Utils.js": -/*!***************************!*\ - !*** ./src/util/Utils.js ***! - \***************************/ -/***/ (function() { - -L.Utils = { - initTranslation: function initTranslation() { - var translation = { - 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) { - this.options.translation = translation; - } else { - // If the translation for a word is not specified, fallback to English. - for (var key in translation) { - if (!this.options.translation.hasOwnProperty(key)) { - this.options.translation[key] = translation[key]; - } - } - } - - L.DomUtil.initTranslation(this.options.translation); - }, - getNestedVal: function getNestedVal(obj, key, nestedKey) { - var dig = [key, nestedKey]; - return dig.reduce(function (obj, k) { - return obj && obj[k]; - }, obj); - } -}; - -/***/ }), - -/***/ "./node_modules/events/events.js": -/*!***************************************!*\ - !*** ./node_modules/events/events.js ***! - \***************************************/ -/***/ (function(module) { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -var R = typeof Reflect === 'object' ? Reflect : null -var ReflectApply = R && typeof R.apply === 'function' - ? R.apply - : function ReflectApply(target, receiver, args) { - return Function.prototype.apply.call(target, receiver, args); - } - -var ReflectOwnKeys -if (R && typeof R.ownKeys === 'function') { - ReflectOwnKeys = R.ownKeys -} else if (Object.getOwnPropertySymbols) { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target) - .concat(Object.getOwnPropertySymbols(target)); - }; -} else { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target); - }; -} - -function ProcessEmitWarning(warning) { - if (console && console.warn) console.warn(warning); -} - -var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { - return value !== value; -} - -function EventEmitter() { - EventEmitter.init.call(this); -} -module.exports = EventEmitter; -module.exports.once = once; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._eventsCount = 0; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -var defaultMaxListeners = 10; - -function checkListener(listener) { - if (typeof listener !== 'function') { - throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); - } -} - -Object.defineProperty(EventEmitter, 'defaultMaxListeners', { - enumerable: true, - get: function() { - return defaultMaxListeners; - }, - set: function(arg) { - if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { - throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); - } - defaultMaxListeners = arg; - } -}); - -EventEmitter.init = function() { - - if (this._events === undefined || - this._events === Object.getPrototypeOf(this)._events) { - this._events = Object.create(null); - this._eventsCount = 0; - } - - this._maxListeners = this._maxListeners || undefined; -}; - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { - if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { - throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); - } - this._maxListeners = n; - return this; -}; - -function _getMaxListeners(that) { - if (that._maxListeners === undefined) - return EventEmitter.defaultMaxListeners; - return that._maxListeners; -} - -EventEmitter.prototype.getMaxListeners = function getMaxListeners() { - return _getMaxListeners(this); -}; - -EventEmitter.prototype.emit = function emit(type) { - var args = []; - for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); - var doError = (type === 'error'); - - var events = this._events; - if (events !== undefined) - doError = (doError && events.error === undefined); - else if (!doError) - return false; - - // If there is no 'error' event listener then throw. - if (doError) { - var er; - if (args.length > 0) - er = args[0]; - if (er instanceof Error) { - // Note: The comments on the `throw` lines are intentional, they show - // up in Node's output if this results in an unhandled exception. - throw er; // Unhandled 'error' event - } - // At least give some kind of context to the user - var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); - err.context = er; - throw err; // Unhandled 'error' event - } - - var handler = events[type]; - - if (handler === undefined) - return false; - - if (typeof handler === 'function') { - ReflectApply(handler, this, args); - } else { - var len = handler.length; - var listeners = arrayClone(handler, len); - for (var i = 0; i < len; ++i) - ReflectApply(listeners[i], this, args); - } - - return true; -}; - -function _addListener(target, type, listener, prepend) { - var m; - var events; - var existing; - - checkListener(listener); - - events = target._events; - if (events === undefined) { - events = target._events = Object.create(null); - target._eventsCount = 0; - } else { - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (events.newListener !== undefined) { - target.emit('newListener', type, - listener.listener ? listener.listener : listener); - - // Re-assign `events` because a newListener handler could have caused the - // this._events to be assigned to a new object - events = target._events; - } - existing = events[type]; - } - - if (existing === undefined) { - // Optimize the case of one listener. Don't need the extra array object. - existing = events[type] = listener; - ++target._eventsCount; - } else { - if (typeof existing === 'function') { - // Adding the second element, need to change to array. - existing = events[type] = - prepend ? [listener, existing] : [existing, listener]; - // If we've already got an array, just append. - } else if (prepend) { - existing.unshift(listener); - } else { - existing.push(listener); - } - - // Check for listener leak - m = _getMaxListeners(target); - if (m > 0 && existing.length > m && !existing.warned) { - existing.warned = true; - // No error code for this since it is a Warning - // eslint-disable-next-line no-restricted-syntax - var w = new Error('Possible EventEmitter memory leak detected. ' + - existing.length + ' ' + String(type) + ' listeners ' + - 'added. Use emitter.setMaxListeners() to ' + - 'increase limit'); - w.name = 'MaxListenersExceededWarning'; - w.emitter = target; - w.type = type; - w.count = existing.length; - ProcessEmitWarning(w); - } - } - - return target; -} - -EventEmitter.prototype.addListener = function addListener(type, listener) { - return _addListener(this, type, listener, false); -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.prependListener = - function prependListener(type, listener) { - return _addListener(this, type, listener, true); - }; - -function onceWrapper() { - if (!this.fired) { - this.target.removeListener(this.type, this.wrapFn); - this.fired = true; - if (arguments.length === 0) - return this.listener.call(this.target); - return this.listener.apply(this.target, arguments); - } -} - -function _onceWrap(target, type, listener) { - var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; - var wrapped = onceWrapper.bind(state); - wrapped.listener = listener; - state.wrapFn = wrapped; - return wrapped; -} - -EventEmitter.prototype.once = function once(type, listener) { - checkListener(listener); - this.on(type, _onceWrap(this, type, listener)); - return this; -}; - -EventEmitter.prototype.prependOnceListener = - function prependOnceListener(type, listener) { - checkListener(listener); - this.prependListener(type, _onceWrap(this, type, listener)); - return this; - }; - -// Emits a 'removeListener' event if and only if the listener was removed. -EventEmitter.prototype.removeListener = - function removeListener(type, listener) { - var list, events, position, i, originalListener; - - checkListener(listener); - - events = this._events; - if (events === undefined) - return this; - - list = events[type]; - if (list === undefined) - return this; - - if (list === listener || list.listener === listener) { - if (--this._eventsCount === 0) - this._events = Object.create(null); - else { - delete events[type]; - if (events.removeListener) - this.emit('removeListener', type, list.listener || listener); - } - } else if (typeof list !== 'function') { - position = -1; - - for (i = list.length - 1; i >= 0; i--) { - if (list[i] === listener || list[i].listener === listener) { - originalListener = list[i].listener; - position = i; - break; - } - } - - if (position < 0) - return this; - - if (position === 0) - list.shift(); - else { - spliceOne(list, position); - } - - if (list.length === 1) - events[type] = list[0]; - - if (events.removeListener !== undefined) - this.emit('removeListener', type, originalListener || listener); - } - - return this; - }; - -EventEmitter.prototype.off = EventEmitter.prototype.removeListener; - -EventEmitter.prototype.removeAllListeners = - function removeAllListeners(type) { - var listeners, events, i; - - events = this._events; - if (events === undefined) - return this; - - // not listening for removeListener, no need to emit - if (events.removeListener === undefined) { - if (arguments.length === 0) { - this._events = Object.create(null); - this._eventsCount = 0; - } else if (events[type] !== undefined) { - if (--this._eventsCount === 0) - this._events = Object.create(null); - else - delete events[type]; - } - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - var keys = Object.keys(events); - var key; - for (i = 0; i < keys.length; ++i) { - key = keys[i]; - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = Object.create(null); - this._eventsCount = 0; - return this; - } - - listeners = events[type]; - - if (typeof listeners === 'function') { - this.removeListener(type, listeners); - } else if (listeners !== undefined) { - // LIFO order - for (i = listeners.length - 1; i >= 0; i--) { - this.removeListener(type, listeners[i]); - } - } - - return this; - }; - -function _listeners(target, type, unwrap) { - var events = target._events; - - if (events === undefined) - return []; - - var evlistener = events[type]; - if (evlistener === undefined) - return []; - - if (typeof evlistener === 'function') - return unwrap ? [evlistener.listener || evlistener] : [evlistener]; - - return unwrap ? - unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); -} - -EventEmitter.prototype.listeners = function listeners(type) { - return _listeners(this, type, true); -}; - -EventEmitter.prototype.rawListeners = function rawListeners(type) { - return _listeners(this, type, false); -}; - -EventEmitter.listenerCount = function(emitter, type) { - if (typeof emitter.listenerCount === 'function') { - return emitter.listenerCount(type); - } else { - return listenerCount.call(emitter, type); - } -}; - -EventEmitter.prototype.listenerCount = listenerCount; -function listenerCount(type) { - var events = this._events; - - if (events !== undefined) { - var evlistener = events[type]; - - if (typeof evlistener === 'function') { - return 1; - } else if (evlistener !== undefined) { - return evlistener.length; - } - } - - return 0; -} - -EventEmitter.prototype.eventNames = function eventNames() { - return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; -}; - -function arrayClone(arr, n) { - var copy = new Array(n); - for (var i = 0; i < n; ++i) - copy[i] = arr[i]; - return copy; -} - -function spliceOne(list, index) { - for (; index + 1 < list.length; index++) - list[index] = list[index + 1]; - list.pop(); -} - -function unwrapListeners(arr) { - var ret = new Array(arr.length); - for (var i = 0; i < ret.length; ++i) { - ret[i] = arr[i].listener || arr[i]; - } - return ret; -} - -function once(emitter, name) { - return new Promise(function (resolve, reject) { - function errorListener(err) { - emitter.removeListener(name, resolver); - reject(err); - } - - function resolver() { - if (typeof emitter.removeListener === 'function') { - emitter.removeListener('error', errorListener); - } - resolve([].slice.call(arguments)); - }; - - eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); - if (name !== 'error') { - addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); - } - }); -} - -function addErrorHandlerIfEventEmitter(emitter, handler, flags) { - if (typeof emitter.on === 'function') { - eventTargetAgnosticAddListener(emitter, 'error', handler, flags); - } -} - -function eventTargetAgnosticAddListener(emitter, name, listener, flags) { - if (typeof emitter.on === 'function') { - if (flags.once) { - emitter.once(name, listener); - } else { - emitter.on(name, listener); - } - } else if (typeof emitter.addEventListener === 'function') { - // EventTarget does not have `error` event semantics like Node - // EventEmitters, we do not listen for `error` events here. - emitter.addEventListener(name, function wrapListener(arg) { - // IE does not have builtin `{ once: true }` support so we - // have to do it manually. - if (flags.once) { - emitter.removeEventListener(name, wrapListener); - } - listener(arg); - }); - } else { - throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); - } -} - - -/***/ }), - -/***/ "./node_modules/html-entities/lib/index.js": -/*!*************************************************!*\ - !*** ./node_modules/html-entities/lib/index.js ***! - \*************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; - -var __assign = (this && this.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -var named_references_1 = __webpack_require__(/*! ./named-references */ "./node_modules/html-entities/lib/named-references.js"); -var numeric_unicode_map_1 = __webpack_require__(/*! ./numeric-unicode-map */ "./node_modules/html-entities/lib/numeric-unicode-map.js"); -var surrogate_pairs_1 = __webpack_require__(/*! ./surrogate-pairs */ "./node_modules/html-entities/lib/surrogate-pairs.js"); -var allNamedReferences = __assign(__assign({}, named_references_1.namedReferences), { all: named_references_1.namedReferences.html5 }); -var encodeRegExps = { - specialChars: /[<>'"&]/g, - nonAscii: /(?:[<>'"&\u0080-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, - nonAsciiPrintable: /(?:[<>'"&\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, - extensive: /(?:[\x01-\x0c\x0e-\x1f\x21-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7d\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g -}; -var defaultEncodeOptions = { - mode: 'specialChars', - level: 'all', - numeric: 'decimal' -}; -/** Encodes all the necessary (specified by `level`) characters in the text */ -function encode(text, _a) { - var _b = _a === void 0 ? defaultEncodeOptions : _a, _c = _b.mode, mode = _c === void 0 ? 'specialChars' : _c, _d = _b.numeric, numeric = _d === void 0 ? 'decimal' : _d, _e = _b.level, level = _e === void 0 ? 'all' : _e; - if (!text) { - return ''; - } - var encodeRegExp = encodeRegExps[mode]; - var references = allNamedReferences[level].characters; - var isHex = numeric === 'hexadecimal'; - encodeRegExp.lastIndex = 0; - var _b = encodeRegExp.exec(text); - var _c; - if (_b) { - _c = ''; - var _d = 0; - do { - if (_d !== _b.index) { - _c += text.substring(_d, _b.index); - } - var _e = _b[0]; - var result_1 = references[_e]; - if (!result_1) { - var code_1 = _e.length > 1 ? surrogate_pairs_1.getCodePoint(_e, 0) : _e.charCodeAt(0); - result_1 = (isHex ? '&#x' + code_1.toString(16) : '&#' + code_1) + ';'; - } - _c += result_1; - _d = _b.index + _e.length; - } while ((_b = encodeRegExp.exec(text))); - if (_d !== text.length) { - _c += text.substring(_d); - } - } - else { - _c = - text; - } - return _c; -} -exports.encode = encode; -var defaultDecodeOptions = { - scope: 'body', - level: 'all' -}; -var strict = /&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g; -var attribute = /&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g; -var baseDecodeRegExps = { - xml: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.xml - }, - html4: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.html4 - }, - html5: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.html5 - } -}; -var decodeRegExps = __assign(__assign({}, baseDecodeRegExps), { all: baseDecodeRegExps.html5 }); -var fromCharCode = String.fromCharCode; -var outOfBoundsChar = fromCharCode(65533); -var defaultDecodeEntityOptions = { - level: 'all' -}; -/** Decodes a single entity */ -function decodeEntity(entity, _a) { - var _b = (_a === void 0 ? defaultDecodeEntityOptions : _a).level, level = _b === void 0 ? 'all' : _b; - if (!entity) { - return ''; - } - var _b = entity; - var decodeEntityLastChar_1 = entity[entity.length - 1]; - if (false) {} - else if (false) {} - else { - var decodeResultByReference_1 = allNamedReferences[level].entities[entity]; - if (decodeResultByReference_1) { - _b = decodeResultByReference_1; - } - else if (entity[0] === '&' && entity[1] === '#') { - var decodeSecondChar_1 = entity[2]; - var decodeCode_1 = decodeSecondChar_1 == 'x' || decodeSecondChar_1 == 'X' - ? parseInt(entity.substr(3), 16) - : parseInt(entity.substr(2)); - _b = - decodeCode_1 >= 0x10ffff - ? outOfBoundsChar - : decodeCode_1 > 65535 - ? surrogate_pairs_1.fromCodePoint(decodeCode_1) - : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_1] || decodeCode_1); - } - } - return _b; -} -exports.decodeEntity = decodeEntity; -/** Decodes all entities in the text */ -function decode(text, _a) { - var decodeSecondChar_1 = _a === void 0 ? defaultDecodeOptions : _a, decodeCode_1 = decodeSecondChar_1.level, level = decodeCode_1 === void 0 ? 'all' : decodeCode_1, _b = decodeSecondChar_1.scope, scope = _b === void 0 ? level === 'xml' ? 'strict' : 'body' : _b; - if (!text) { - return ''; - } - var decodeRegExp = decodeRegExps[level][scope]; - var references = allNamedReferences[level].entities; - var isAttribute = scope === 'attribute'; - var isStrict = scope === 'strict'; - decodeRegExp.lastIndex = 0; - var replaceMatch_1 = decodeRegExp.exec(text); - var replaceResult_1; - if (replaceMatch_1) { - replaceResult_1 = ''; - var replaceLastIndex_1 = 0; - do { - if (replaceLastIndex_1 !== replaceMatch_1.index) { - replaceResult_1 += text.substring(replaceLastIndex_1, replaceMatch_1.index); - } - var replaceInput_1 = replaceMatch_1[0]; - var decodeResult_1 = replaceInput_1; - var decodeEntityLastChar_2 = replaceInput_1[replaceInput_1.length - 1]; - if (isAttribute - && decodeEntityLastChar_2 === '=') { - decodeResult_1 = replaceInput_1; - } - else if (isStrict - && decodeEntityLastChar_2 !== ';') { - decodeResult_1 = replaceInput_1; - } - else { - var decodeResultByReference_2 = references[replaceInput_1]; - if (decodeResultByReference_2) { - decodeResult_1 = decodeResultByReference_2; - } - else if (replaceInput_1[0] === '&' && replaceInput_1[1] === '#') { - var decodeSecondChar_2 = replaceInput_1[2]; - var decodeCode_2 = decodeSecondChar_2 == 'x' || decodeSecondChar_2 == 'X' - ? parseInt(replaceInput_1.substr(3), 16) - : parseInt(replaceInput_1.substr(2)); - decodeResult_1 = - decodeCode_2 >= 0x10ffff - ? outOfBoundsChar - : decodeCode_2 > 65535 - ? surrogate_pairs_1.fromCodePoint(decodeCode_2) - : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_2] || decodeCode_2); - } - } - replaceResult_1 += decodeResult_1; - replaceLastIndex_1 = replaceMatch_1.index + replaceInput_1.length; - } while ((replaceMatch_1 = decodeRegExp.exec(text))); - if (replaceLastIndex_1 !== text.length) { - replaceResult_1 += text.substring(replaceLastIndex_1); - } - } - else { - replaceResult_1 = - text; - } - return replaceResult_1; -} -exports.decode = decode; - - -/***/ }), - -/***/ "./node_modules/html-entities/lib/named-references.js": -/*!************************************************************!*\ - !*** ./node_modules/html-entities/lib/named-references.js ***! - \************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.bodyRegExps={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g};exports.namedReferences={xml:{entities:{"<":"<",">":">",""":'"',"'":"'","&":"&"},characters:{"<":"<",">":">",'"':""","'":"'","&":"&"}},html4:{entities:{"'":"'"," ":" "," ":" ","¡":"¡","¡":"¡","¢":"¢","¢":"¢","£":"£","£":"£","¤":"¤","¤":"¤","¥":"Â¥","¥":"Â¥","¦":"¦","¦":"¦","§":"§","§":"§","¨":"¨","¨":"¨","©":"©","©":"©","ª":"ª","ª":"ª","«":"«","«":"«","¬":"¬","¬":"¬","­":"­","­":"­","®":"®","®":"®","¯":"¯","¯":"¯","°":"°","°":"°","±":"±","±":"±","²":"²","²":"²","³":"³","³":"³","´":"´","´":"´","µ":"µ","µ":"µ","¶":"¶","¶":"¶","·":"·","·":"·","¸":"¸","¸":"¸","¹":"¹","¹":"¹","º":"º","º":"º","»":"»","»":"»","¼":"¼","¼":"¼","½":"½","½":"½","¾":"¾","¾":"¾","¿":"¿","¿":"¿","À":"À","À":"À","Á":"Ã","Á":"Ã","Â":"Â","Â":"Â","Ã":"Ã","Ã":"Ã","Ä":"Ä","Ä":"Ä","Å":"Ã…","Å":"Ã…","Æ":"Æ","Æ":"Æ","Ç":"Ç","Ç":"Ç","È":"È","È":"È","É":"É","É":"É","Ê":"Ê","Ê":"Ê","Ë":"Ë","Ë":"Ë","Ì":"ÃŒ","Ì":"ÃŒ","Í":"Ã","Í":"Ã","Î":"ÃŽ","Î":"ÃŽ","Ï":"Ã","Ï":"Ã","Ð":"Ã","Ð":"Ã","Ñ":"Ñ","Ñ":"Ñ","Ò":"Ã’","Ò":"Ã’","Ó":"Ó","Ó":"Ó","Ô":"Ô","Ô":"Ô","Õ":"Õ","Õ":"Õ","Ö":"Ö","Ö":"Ö","×":"×","×":"×","Ø":"Ø","Ø":"Ø","Ù":"Ù","Ù":"Ù","Ú":"Ú","Ú":"Ú","Û":"Û","Û":"Û","Ü":"Ü","Ü":"Ü","Ý":"Ã","Ý":"Ã","Þ":"Þ","Þ":"Þ","ß":"ß","ß":"ß","à":"à","à":"à","á":"á","á":"á","â":"â","â":"â","ã":"ã","ã":"ã","ä":"ä","ä":"ä","å":"Ã¥","å":"Ã¥","æ":"æ","æ":"æ","ç":"ç","ç":"ç","è":"è","è":"è","é":"é","é":"é","ê":"ê","ê":"ê","ë":"ë","ë":"ë","ì":"ì","ì":"ì","í":"í","í":"í","î":"î","î":"î","ï":"ï","ï":"ï","ð":"ð","ð":"ð","ñ":"ñ","ñ":"ñ","ò":"ò","ò":"ò","ó":"ó","ó":"ó","ô":"ô","ô":"ô","õ":"õ","õ":"õ","ö":"ö","ö":"ö","÷":"÷","÷":"÷","ø":"ø","ø":"ø","ù":"ù","ù":"ù","ú":"ú","ú":"ú","û":"û","û":"û","ü":"ü","ü":"ü","ý":"ý","ý":"ý","þ":"þ","þ":"þ","ÿ":"ÿ","ÿ":"ÿ",""":'"',""":'"',"&":"&","&":"&","<":"<","<":"<",">":">",">":">","Œ":"Å’","œ":"Å“","Š":"Å ","š":"Å¡","Ÿ":"Ÿ","ˆ":"ˆ","˜":"Ëœ"," ":" "," ":" "," ":" ","‌":"‌","‍":"â€","‎":"‎","‏":"â€","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","”":"â€","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","ƒ":"Æ’","Α":"Α","Β":"Î’","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Ν":"Î","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Υ":"Î¥","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","π":"Ï€","ρ":"Ï","ς":"Ï‚","σ":"σ","τ":"Ï„","υ":"Ï…","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","ϑ":"Ï‘","ϒ":"Ï’","ϖ":"Ï–","•":"•","…":"…","′":"′","″":"″","‾":"‾","⁄":"â„","℘":"℘","ℑ":"â„‘","ℜ":"ℜ","™":"â„¢","ℵ":"ℵ","←":"â†","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","⇐":"â‡","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","∏":"âˆ","∑":"∑","−":"−","∗":"∗","√":"√","∝":"âˆ","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","⋅":"â‹…","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","⟨":"〈","⟩":"〉","◊":"â—Š","♠":"â™ ","♣":"♣","♥":"♥","♦":"♦"},characters:{"'":"'"," ":" ","¡":"¡","¢":"¢","£":"£","¤":"¤","Â¥":"¥","¦":"¦","§":"§","¨":"¨","©":"©","ª":"ª","«":"«","¬":"¬","­":"­","®":"®","¯":"¯","°":"°","±":"±","²":"²","³":"³","´":"´","µ":"µ","¶":"¶","·":"·","¸":"¸","¹":"¹","º":"º","»":"»","¼":"¼","½":"½","¾":"¾","¿":"¿","À":"À","Ã":"Á","Â":"Â","Ã":"Ã","Ä":"Ä","Ã…":"Å","Æ":"Æ","Ç":"Ç","È":"È","É":"É","Ê":"Ê","Ë":"Ë","ÃŒ":"Ì","Ã":"Í","ÃŽ":"Î","Ã":"Ï","Ã":"Ð","Ñ":"Ñ","Ã’":"Ò","Ó":"Ó","Ô":"Ô","Õ":"Õ","Ö":"Ö","×":"×","Ø":"Ø","Ù":"Ù","Ú":"Ú","Û":"Û","Ü":"Ü","Ã":"Ý","Þ":"Þ","ß":"ß","à":"à","á":"á","â":"â","ã":"ã","ä":"ä","Ã¥":"å","æ":"æ","ç":"ç","è":"è","é":"é","ê":"ê","ë":"ë","ì":"ì","í":"í","î":"î","ï":"ï","ð":"ð","ñ":"ñ","ò":"ò","ó":"ó","ô":"ô","õ":"õ","ö":"ö","÷":"÷","ø":"ø","ù":"ù","ú":"ú","û":"û","ü":"ü","ý":"ý","þ":"þ","ÿ":"ÿ",'"':""","&":"&","<":"<",">":">","Å’":"Œ","Å“":"œ","Å ":"Š","Å¡":"š","Ÿ":"Ÿ","ˆ":"ˆ","Ëœ":"˜"," ":" "," ":" "," ":" ","‌":"‌","â€":"‍","‎":"‎","â€":"‏","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","â€":"”","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","Æ’":"ƒ","Α":"Α","Î’":"Β","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Î":"Ν","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Î¥":"Υ","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","Ï€":"π","Ï":"ρ","Ï‚":"ς","σ":"σ","Ï„":"τ","Ï…":"υ","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","Ï‘":"ϑ","Ï’":"ϒ","Ï–":"ϖ","•":"•","…":"…","′":"′","″":"″","‾":"‾","â„":"⁄","℘":"℘","â„‘":"ℑ","ℜ":"ℜ","â„¢":"™","ℵ":"ℵ","â†":"←","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","â‡":"⇐","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","âˆ":"∏","∑":"∑","−":"−","∗":"∗","√":"√","âˆ":"∝","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","â‹…":"⋅","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","〈":"⟨","〉":"⟩","â—Š":"◊","â™ ":"♠","♣":"♣","♥":"♥","♦":"♦"}},html5:{entities:{"Æ":"Æ","Æ":"Æ","&":"&","&":"&","Á":"Ã","Á":"Ã","Ă":"Ä‚","Â":"Â","Â":"Â","А":"Ð","𝔄":"ð”„","À":"À","À":"À","Α":"Α","Ā":"Ä€","⩓":"â©“","Ą":"Ä„","𝔸":"ð”¸","⁡":"â¡","Å":"Ã…","Å":"Ã…","𝒜":"ð’œ","≔":"≔","Ã":"Ã","Ã":"Ã","Ä":"Ä","Ä":"Ä","∖":"∖","⫧":"â«§","⌆":"⌆","Б":"Б","∵":"∵","ℬ":"ℬ","Β":"Î’","𝔅":"ð”…","𝔹":"ð”¹","˘":"˘","ℬ":"ℬ","≎":"≎","Ч":"Ч","©":"©","©":"©","Ć":"Ć","⋒":"â‹’","ⅅ":"â……","ℭ":"â„­","Č":"ÄŒ","Ç":"Ç","Ç":"Ç","Ĉ":"Ĉ","∰":"∰","Ċ":"ÄŠ","¸":"¸","·":"·","ℭ":"â„­","Χ":"Χ","⊙":"⊙","⊖":"⊖","⊕":"⊕","⊗":"⊗","∲":"∲","”":"â€","’":"’","∷":"∷","⩴":"â©´","≡":"≡","∯":"∯","∮":"∮","ℂ":"â„‚","∐":"âˆ","∳":"∳","⨯":"⨯","𝒞":"ð’ž","⋓":"â‹“","≍":"â‰","ⅅ":"â……","⤑":"⤑","Ђ":"Ђ","Ѕ":"Ð…","Џ":"Ð","‡":"‡","↡":"↡","⫤":"⫤","Ď":"ÄŽ","Д":"Д","∇":"∇","Δ":"Δ","𝔇":"ð”‡","´":"´","˙":"Ë™","˝":"Ë","`":"`","˜":"Ëœ","⋄":"â‹„","ⅆ":"â…†","𝔻":"ð”»","¨":"¨","⃜":"⃜","≐":"â‰","∯":"∯","¨":"¨","⇓":"⇓","⇐":"â‡","⇔":"⇔","⫤":"⫤","⟸":"⟸","⟺":"⟺","⟹":"⟹","⇒":"⇒","⊨":"⊨","⇑":"⇑","⇕":"⇕","∥":"∥","↓":"↓","⤓":"⤓","⇵":"⇵","̑":"Ì‘","⥐":"â¥","⥞":"⥞","↽":"↽","⥖":"⥖","⥟":"⥟","⇁":"â‡","⥗":"⥗","⊤":"⊤","↧":"↧","⇓":"⇓","𝒟":"ð’Ÿ","Đ":"Ä","Ŋ":"ÅŠ","Ð":"Ã","Ð":"Ã","É":"É","É":"É","Ě":"Äš","Ê":"Ê","Ê":"Ê","Э":"Э","Ė":"Ä–","𝔈":"ð”ˆ","È":"È","È":"È","∈":"∈","Ē":"Ä’","◻":"â—»","▫":"â–«","Ę":"Ę","𝔼":"ð”¼","Ε":"Ε","⩵":"⩵","≂":"≂","⇌":"⇌","ℰ":"â„°","⩳":"⩳","Η":"Η","Ë":"Ë","Ë":"Ë","∃":"∃","ⅇ":"â…‡","Ф":"Ф","𝔉":"ð”‰","◼":"â—¼","▪":"â–ª","𝔽":"ð”½","∀":"∀","ℱ":"ℱ","ℱ":"ℱ","Ѓ":"Ѓ",">":">",">":">","Γ":"Γ","Ϝ":"Ïœ","Ğ":"Äž","Ģ":"Ä¢","Ĝ":"Äœ","Г":"Г","Ġ":"Ä ","𝔊":"ð”Š","⋙":"â‹™","𝔾":"ð”¾","≥":"≥","⋛":"â‹›","≧":"≧","⪢":"⪢","≷":"≷","⩾":"⩾","≳":"≳","𝒢":"ð’¢","≫":"≫","Ъ":"Ъ","ˇ":"ˇ","^":"^","Ĥ":"Ĥ","ℌ":"ℌ","ℋ":"â„‹","ℍ":"â„","─":"─","ℋ":"â„‹","Ħ":"Ħ","≎":"≎","≏":"â‰","Е":"Е","IJ":"IJ","Ё":"Ð","Í":"Ã","Í":"Ã","Î":"ÃŽ","Î":"ÃŽ","И":"И","İ":"İ","ℑ":"â„‘","Ì":"ÃŒ","Ì":"ÃŒ","ℑ":"â„‘","Ī":"Ī","ⅈ":"â…ˆ","⇒":"⇒","∬":"∬","∫":"∫","⋂":"â‹‚","⁣":"â£","⁢":"â¢","Į":"Ä®","𝕀":"ð•€","Ι":"Ι","ℐ":"â„","Ĩ":"Ĩ","І":"І","Ï":"Ã","Ï":"Ã","Ĵ":"Ä´","Й":"Й","𝔍":"ð”","𝕁":"ð•","𝒥":"ð’¥","Ј":"Ј","Є":"Є","Х":"Ð¥","Ќ":"ÐŒ","Κ":"Κ","Ķ":"Ķ","К":"К","𝔎":"ð”Ž","𝕂":"ð•‚","𝒦":"ð’¦","Љ":"Љ","<":"<","<":"<","Ĺ":"Ĺ","Λ":"Λ","⟪":"⟪","ℒ":"â„’","↞":"↞","Ľ":"Ľ","Ļ":"Ä»","Л":"Л","⟨":"⟨","←":"â†","⇤":"⇤","⇆":"⇆","⌈":"⌈","⟦":"⟦","⥡":"⥡","⇃":"⇃","⥙":"⥙","⌊":"⌊","↔":"↔","⥎":"⥎","⊣":"⊣","↤":"↤","⥚":"⥚","⊲":"⊲","⧏":"â§","⊴":"⊴","⥑":"⥑","⥠":"⥠","↿":"↿","⥘":"⥘","↼":"↼","⥒":"⥒","⇐":"â‡","⇔":"⇔","⋚":"⋚","≦":"≦","≶":"≶","⪡":"⪡","⩽":"⩽","≲":"≲","𝔏":"ð”","⋘":"⋘","⇚":"⇚","Ŀ":"Ä¿","⟵":"⟵","⟷":"⟷","⟶":"⟶","⟸":"⟸","⟺":"⟺","⟹":"⟹","𝕃":"ð•ƒ","↙":"↙","↘":"↘","ℒ":"â„’","↰":"↰","Ł":"Å","≪":"≪","⤅":"⤅","М":"М"," ":"âŸ","ℳ":"ℳ","𝔐":"ð”","∓":"∓","𝕄":"ð•„","ℳ":"ℳ","Μ":"Μ","Њ":"Њ","Ń":"Ń","Ň":"Ň","Ņ":"Å…","Н":"Ð","​":"​","​":"​","​":"​","​":"​","≫":"≫","≪":"≪"," ":"\n","𝔑":"ð”‘","⁠":"â "," ":" ","ℕ":"â„•","⫬":"⫬","≢":"≢","≭":"≭","∦":"∦","∉":"∉","≠":"≠","≂̸":"≂̸","∄":"∄","≯":"≯","≱":"≱","≧̸":"≧̸","≫̸":"≫̸","≹":"≹","⩾̸":"⩾̸","≵":"≵","≎̸":"≎̸","≏̸":"â‰Ì¸","⋪":"⋪","⧏̸":"â§Ì¸","⋬":"⋬","≮":"≮","≰":"≰","≸":"≸","≪̸":"≪̸","⩽̸":"⩽̸","≴":"≴","⪢̸":"⪢̸","⪡̸":"⪡̸","⊀":"⊀","⪯̸":"⪯̸","⋠":"â‹ ","∌":"∌","⋫":"â‹«","⧐̸":"â§Ì¸","⋭":"â‹­","⊏̸":"âŠÌ¸","⋢":"â‹¢","⊐̸":"âŠÌ¸","⋣":"â‹£","⊂⃒":"⊂⃒","⊈":"⊈","⊁":"âŠ","⪰̸":"⪰̸","⋡":"â‹¡","≿̸":"≿̸","⊃⃒":"⊃⃒","⊉":"⊉","≁":"â‰","≄":"≄","≇":"≇","≉":"≉","∤":"∤","𝒩":"ð’©","Ñ":"Ñ","Ñ":"Ñ","Ν":"Î","Œ":"Å’","Ó":"Ó","Ó":"Ó","Ô":"Ô","Ô":"Ô","О":"О","Ő":"Å","𝔒":"ð”’","Ò":"Ã’","Ò":"Ã’","Ō":"ÅŒ","Ω":"Ω","Ο":"Ο","𝕆":"ð•†","“":"“","‘":"‘","⩔":"â©”","𝒪":"ð’ª","Ø":"Ø","Ø":"Ø","Õ":"Õ","Õ":"Õ","⨷":"⨷","Ö":"Ö","Ö":"Ö","‾":"‾","⏞":"âž","⎴":"⎴","⏜":"âœ","∂":"∂","П":"П","𝔓":"ð”“","Φ":"Φ","Π":"Π","±":"±","ℌ":"ℌ","ℙ":"â„™","⪻":"⪻","≺":"≺","⪯":"⪯","≼":"≼","≾":"≾","″":"″","∏":"âˆ","∷":"∷","∝":"âˆ","𝒫":"ð’«","Ψ":"Ψ",""":'"',""":'"',"𝔔":"ð””","ℚ":"ℚ","𝒬":"ð’¬","⤐":"â¤","®":"®","®":"®","Ŕ":"Å”","⟫":"⟫","↠":"↠","⤖":"⤖","Ř":"Ř","Ŗ":"Å–","Р":"Р","ℜ":"ℜ","∋":"∋","⇋":"⇋","⥯":"⥯","ℜ":"ℜ","Ρ":"Ρ","⟩":"⟩","→":"→","⇥":"⇥","⇄":"⇄","⌉":"⌉","⟧":"⟧","⥝":"â¥","⇂":"⇂","⥕":"⥕","⌋":"⌋","⊢":"⊢","↦":"↦","⥛":"⥛","⊳":"⊳","⧐":"â§","⊵":"⊵","⥏":"â¥","⥜":"⥜","↾":"↾","⥔":"⥔","⇀":"⇀","⥓":"⥓","⇒":"⇒","ℝ":"â„","⥰":"⥰","⇛":"⇛","ℛ":"â„›","↱":"↱","⧴":"â§´","Щ":"Щ","Ш":"Ш","Ь":"Ь","Ś":"Åš","⪼":"⪼","Š":"Å ","Ş":"Åž","Ŝ":"Åœ","С":"С","𝔖":"ð”–","↓":"↓","←":"â†","→":"→","↑":"↑","Σ":"Σ","∘":"∘","𝕊":"ð•Š","√":"√","□":"â–¡","⊓":"⊓","⊏":"âŠ","⊑":"⊑","⊐":"âŠ","⊒":"⊒","⊔":"⊔","𝒮":"ð’®","⋆":"⋆","⋐":"â‹","⋐":"â‹","⊆":"⊆","≻":"≻","⪰":"⪰","≽":"≽","≿":"≿","∋":"∋","∑":"∑","⋑":"â‹‘","⊃":"⊃","⊇":"⊇","⋑":"â‹‘","Þ":"Þ","Þ":"Þ","™":"â„¢","Ћ":"Ћ","Ц":"Ц"," ":"\t","Τ":"Τ","Ť":"Ť","Ţ":"Å¢","Т":"Т","𝔗":"ð”—","∴":"∴","Θ":"Θ","  ":"âŸâ€Š"," ":" ","∼":"∼","≃":"≃","≅":"≅","≈":"≈","𝕋":"ð•‹","⃛":"⃛","𝒯":"ð’¯","Ŧ":"Ŧ","Ú":"Ú","Ú":"Ú","↟":"↟","⥉":"⥉","Ў":"ÐŽ","Ŭ":"Ŭ","Û":"Û","Û":"Û","У":"У","Ű":"Ű","𝔘":"ð”˜","Ù":"Ù","Ù":"Ù","Ū":"Ū","_":"_","⏟":"âŸ","⎵":"⎵","⏝":"â","⋃":"⋃","⊎":"⊎","Ų":"Ų","𝕌":"ð•Œ","↑":"↑","⤒":"⤒","⇅":"⇅","↕":"↕","⥮":"⥮","⊥":"⊥","↥":"↥","⇑":"⇑","⇕":"⇕","↖":"↖","↗":"↗","ϒ":"Ï’","Υ":"Î¥","Ů":"Å®","𝒰":"ð’°","Ũ":"Ũ","Ü":"Ü","Ü":"Ü","⊫":"⊫","⫫":"â««","В":"Ð’","⊩":"⊩","⫦":"⫦","⋁":"â‹","‖":"‖","‖":"‖","∣":"∣","|":"|","❘":"â˜","≀":"≀"," ":" ","𝔙":"ð”™","𝕍":"ð•","𝒱":"ð’±","⊪":"⊪","Ŵ":"Å´","⋀":"â‹€","𝔚":"ð”š","𝕎":"ð•Ž","𝒲":"ð’²","𝔛":"ð”›","Ξ":"Ξ","𝕏":"ð•","𝒳":"ð’³","Я":"Я","Ї":"Ї","Ю":"Ю","Ý":"Ã","Ý":"Ã","Ŷ":"Ŷ","Ы":"Ы","𝔜":"ð”œ","𝕐":"ð•","𝒴":"ð’´","Ÿ":"Ÿ","Ж":"Ж","Ź":"Ź","Ž":"Ž","З":"З","Ż":"Å»","​":"​","Ζ":"Ζ","ℨ":"ℨ","ℤ":"ℤ","𝒵":"ð’µ","á":"á","á":"á","ă":"ă","∾":"∾","∾̳":"∾̳","∿":"∿","â":"â","â":"â","´":"´","´":"´","а":"а","æ":"æ","æ":"æ","⁡":"â¡","𝔞":"ð”ž","à":"à","à":"à","ℵ":"ℵ","ℵ":"ℵ","α":"α","ā":"Ä","⨿":"⨿","&":"&","&":"&","∧":"∧","⩕":"â©•","⩜":"⩜","⩘":"⩘","⩚":"⩚","∠":"∠","⦤":"⦤","∠":"∠","∡":"∡","⦨":"⦨","⦩":"⦩","⦪":"⦪","⦫":"⦫","⦬":"⦬","⦭":"⦭","⦮":"⦮","⦯":"⦯","∟":"∟","⊾":"⊾","⦝":"â¦","∢":"∢","Å":"Ã…","⍼":"â¼","ą":"Ä…","𝕒":"ð•’","≈":"≈","⩰":"â©°","⩯":"⩯","≊":"≊","≋":"≋","'":"'","≈":"≈","≊":"≊","å":"Ã¥","å":"Ã¥","𝒶":"ð’¶","*":"*","≈":"≈","≍":"â‰","ã":"ã","ã":"ã","ä":"ä","ä":"ä","∳":"∳","⨑":"⨑","⫭":"â«­","≌":"≌","϶":"϶","‵":"‵","∽":"∽","⋍":"â‹","⊽":"⊽","⌅":"⌅","⌅":"⌅","⎵":"⎵","⎶":"⎶","≌":"≌","б":"б","„":"„","∵":"∵","∵":"∵","⦰":"⦰","϶":"϶","ℬ":"ℬ","β":"β","ℶ":"â„¶","≬":"≬","𝔟":"ð”Ÿ","⋂":"â‹‚","◯":"â—¯","⋃":"⋃","⨀":"⨀","⨁":"â¨","⨂":"⨂","⨆":"⨆","★":"★","▽":"â–½","△":"â–³","⨄":"⨄","⋁":"â‹","⋀":"â‹€","⤍":"â¤","⧫":"â§«","▪":"â–ª","▴":"â–´","▾":"â–¾","◂":"â—‚","▸":"â–¸","␣":"â£","▒":"â–’","░":"â–‘","▓":"â–“","█":"â–ˆ","=⃥":"=⃥","≡⃥":"≡⃥","⌐":"âŒ","𝕓":"ð•“","⊥":"⊥","⊥":"⊥","⋈":"⋈","╗":"â•—","╔":"â•”","╖":"â•–","╓":"â•“","═":"â•","╦":"╦","╩":"â•©","╤":"╤","╧":"â•§","╝":"â•","╚":"╚","╜":"╜","╙":"â•™","║":"â•‘","╬":"╬","╣":"â•£","╠":"â• ","╫":"â•«","╢":"â•¢","╟":"╟","⧉":"⧉","╕":"â••","╒":"â•’","┐":"â”","┌":"┌","─":"─","╥":"â•¥","╨":"╨","┬":"┬","┴":"â”´","⊟":"⊟","⊞":"⊞","⊠":"⊠","╛":"â•›","╘":"╘","┘":"┘","└":"â””","│":"│","╪":"╪","╡":"â•¡","╞":"╞","┼":"┼","┤":"┤","├":"├","‵":"‵","˘":"˘","¦":"¦","¦":"¦","𝒷":"ð’·","⁏":"â","∽":"∽","⋍":"â‹","\":"\\","⧅":"â§…","⟈":"⟈","•":"•","•":"•","≎":"≎","⪮":"⪮","≏":"â‰","≏":"â‰","ć":"ć","∩":"∩","⩄":"â©„","⩉":"⩉","⩋":"â©‹","⩇":"⩇","⩀":"â©€","∩︀":"∩︀","⁁":"â","ˇ":"ˇ","⩍":"â©","č":"Ä","ç":"ç","ç":"ç","ĉ":"ĉ","⩌":"⩌","⩐":"â©","ċ":"Ä‹","¸":"¸","¸":"¸","⦲":"⦲","¢":"¢","¢":"¢","·":"·","𝔠":"ð” ","ч":"ч","✓":"✓","✓":"✓","χ":"χ","○":"â—‹","⧃":"⧃","ˆ":"ˆ","≗":"≗","↺":"↺","↻":"↻","®":"®","Ⓢ":"Ⓢ","⊛":"⊛","⊚":"⊚","⊝":"âŠ","≗":"≗","⨐":"â¨","⫯":"⫯","⧂":"â§‚","♣":"♣","♣":"♣",":":":","≔":"≔","≔":"≔",",":",","@":"@","∁":"âˆ","∘":"∘","∁":"âˆ","ℂ":"â„‚","≅":"≅","⩭":"â©­","∮":"∮","𝕔":"ð•”","∐":"âˆ","©":"©","©":"©","℗":"â„—","↵":"↵","✗":"✗","𝒸":"ð’¸","⫏":"â«","⫑":"â«‘","⫐":"â«","⫒":"â«’","⋯":"⋯","⤸":"⤸","⤵":"⤵","⋞":"⋞","⋟":"⋟","↶":"↶","⤽":"⤽","∪":"∪","⩈":"⩈","⩆":"⩆","⩊":"⩊","⊍":"âŠ","⩅":"â©…","∪︀":"∪︀","↷":"↷","⤼":"⤼","⋞":"⋞","⋟":"⋟","⋎":"⋎","⋏":"â‹","¤":"¤","¤":"¤","↶":"↶","↷":"↷","⋎":"⋎","⋏":"â‹","∲":"∲","∱":"∱","⌭":"⌭","⇓":"⇓","⥥":"⥥","†":"†","ℸ":"ℸ","↓":"↓","‐":"â€","⊣":"⊣","⤏":"â¤","˝":"Ë","ď":"Ä","д":"д","ⅆ":"â…†","‡":"‡","⇊":"⇊","⩷":"â©·","°":"°","°":"°","δ":"δ","⦱":"⦱","⥿":"⥿","𝔡":"ð”¡","⇃":"⇃","⇂":"⇂","⋄":"â‹„","⋄":"â‹„","♦":"♦","♦":"♦","¨":"¨","ϝ":"Ï","⋲":"⋲","÷":"÷","÷":"÷","÷":"÷","⋇":"⋇","⋇":"⋇","ђ":"Ñ’","⌞":"⌞","⌍":"âŒ","$":"$","𝕕":"ð••","˙":"Ë™","≐":"â‰","≑":"≑","∸":"∸","∔":"∔","⊡":"⊡","⌆":"⌆","↓":"↓","⇊":"⇊","⇃":"⇃","⇂":"⇂","⤐":"â¤","⌟":"⌟","⌌":"⌌","𝒹":"ð’¹","ѕ":"Ñ•","⧶":"â§¶","đ":"Ä‘","⋱":"⋱","▿":"â–¿","▾":"â–¾","⇵":"⇵","⥯":"⥯","⦦":"⦦","џ":"ÑŸ","⟿":"⟿","⩷":"â©·","≑":"≑","é":"é","é":"é","⩮":"â©®","ě":"Ä›","≖":"≖","ê":"ê","ê":"ê","≕":"≕","э":"Ñ","ė":"Ä—","ⅇ":"â…‡","≒":"≒","𝔢":"ð”¢","⪚":"⪚","è":"è","è":"è","⪖":"⪖","⪘":"⪘","⪙":"⪙","⏧":"â§","ℓ":"â„“","⪕":"⪕","⪗":"⪗","ē":"Ä“","∅":"∅","∅":"∅","∅":"∅"," ":" "," ":" "," ":" ","ŋ":"Å‹"," ":" ","ę":"Ä™","𝕖":"ð•–","⋕":"â‹•","⧣":"â§£","⩱":"⩱","ε":"ε","ε":"ε","ϵ":"ϵ","≖":"≖","≕":"≕","≂":"≂","⪖":"⪖","⪕":"⪕","=":"=","≟":"≟","≡":"≡","⩸":"⩸","⧥":"â§¥","≓":"≓","⥱":"⥱","ℯ":"ℯ","≐":"â‰","≂":"≂","η":"η","ð":"ð","ð":"ð","ë":"ë","ë":"ë","€":"€","!":"!","∃":"∃","ℰ":"â„°","ⅇ":"â…‡","≒":"≒","ф":"Ñ„","♀":"♀","ffi":"ffi","ff":"ff","ffl":"ffl","𝔣":"ð”£","fi":"ï¬","fj":"fj","♭":"â™­","fl":"fl","▱":"â–±","ƒ":"Æ’","𝕗":"ð•—","∀":"∀","⋔":"â‹”","⫙":"â«™","⨍":"â¨","½":"½","½":"½","⅓":"â…“","¼":"¼","¼":"¼","⅕":"â…•","⅙":"â…™","⅛":"â…›","⅔":"â…”","⅖":"â…–","¾":"¾","¾":"¾","⅗":"â…—","⅜":"â…œ","⅘":"â…˜","⅚":"â…š","⅝":"â…","⅞":"â…ž","⁄":"â„","⌢":"⌢","𝒻":"ð’»","≧":"≧","⪌":"⪌","ǵ":"ǵ","γ":"γ","ϝ":"Ï","⪆":"⪆","ğ":"ÄŸ","ĝ":"Ä","г":"г","ġ":"Ä¡","≥":"≥","⋛":"â‹›","≥":"≥","≧":"≧","⩾":"⩾","⩾":"⩾","⪩":"⪩","⪀":"⪀","⪂":"⪂","⪄":"⪄","⋛︀":"⋛︀","⪔":"⪔","𝔤":"ð”¤","≫":"≫","⋙":"â‹™","ℷ":"â„·","ѓ":"Ñ“","≷":"≷","⪒":"⪒","⪥":"⪥","⪤":"⪤","≩":"≩","⪊":"⪊","⪊":"⪊","⪈":"⪈","⪈":"⪈","≩":"≩","⋧":"â‹§","𝕘":"ð•˜","`":"`","ℊ":"ℊ","≳":"≳","⪎":"⪎","⪐":"âª",">":">",">":">","⪧":"⪧","⩺":"⩺","⋗":"â‹—","⦕":"⦕","⩼":"⩼","⪆":"⪆","⥸":"⥸","⋗":"â‹—","⋛":"â‹›","⪌":"⪌","≷":"≷","≳":"≳","≩︀":"≩︀","≩︀":"≩︀","⇔":"⇔"," ":" ","½":"½","ℋ":"â„‹","ъ":"ÑŠ","↔":"↔","⥈":"⥈","↭":"↭","ℏ":"â„","ĥ":"Ä¥","♥":"♥","♥":"♥","…":"…","⊹":"⊹","𝔥":"ð”¥","⤥":"⤥","⤦":"⤦","⇿":"⇿","∻":"∻","↩":"↩","↪":"↪","𝕙":"ð•™","―":"―","𝒽":"ð’½","ℏ":"â„","ħ":"ħ","⁃":"âƒ","‐":"â€","í":"í","í":"í","⁣":"â£","î":"î","î":"î","и":"и","е":"е","¡":"¡","¡":"¡","⇔":"⇔","𝔦":"ð”¦","ì":"ì","ì":"ì","ⅈ":"â…ˆ","⨌":"⨌","∭":"∭","⧜":"â§œ","℩":"â„©","ij":"ij","ī":"Ä«","ℑ":"â„‘","ℐ":"â„","ℑ":"â„‘","ı":"ı","⊷":"⊷","Ƶ":"Ƶ","∈":"∈","℅":"â„…","∞":"∞","⧝":"â§","ı":"ı","∫":"∫","⊺":"⊺","ℤ":"ℤ","⊺":"⊺","⨗":"⨗","⨼":"⨼","ё":"Ñ‘","į":"į","𝕚":"ð•š","ι":"ι","⨼":"⨼","¿":"¿","¿":"¿","𝒾":"ð’¾","∈":"∈","⋹":"⋹","⋵":"⋵","⋴":"â‹´","⋳":"⋳","∈":"∈","⁢":"â¢","ĩ":"Ä©","і":"Ñ–","ï":"ï","ï":"ï","ĵ":"ĵ","й":"й","𝔧":"ð”§","ȷ":"È·","𝕛":"ð•›","𝒿":"ð’¿","ј":"ј","є":"Ñ”","κ":"κ","ϰ":"ϰ","ķ":"Ä·","к":"к","𝔨":"ð”¨","ĸ":"ĸ","х":"Ñ…","ќ":"Ñœ","𝕜":"ð•œ","𝓀":"ð“€","⇚":"⇚","⇐":"â‡","⤛":"⤛","⤎":"⤎","≦":"≦","⪋":"⪋","⥢":"⥢","ĺ":"ĺ","⦴":"⦴","ℒ":"â„’","λ":"λ","⟨":"⟨","⦑":"⦑","⟨":"⟨","⪅":"⪅","«":"«","«":"«","←":"â†","⇤":"⇤","⤟":"⤟","⤝":"â¤","↩":"↩","↫":"↫","⤹":"⤹","⥳":"⥳","↢":"↢","⪫":"⪫","⤙":"⤙","⪭":"⪭","⪭︀":"⪭︀","⤌":"⤌","❲":"â²","{":"{","[":"[","⦋":"⦋","⦏":"â¦","⦍":"â¦","ľ":"ľ","ļ":"ļ","⌈":"⌈","{":"{","л":"л","⤶":"⤶","“":"“","„":"„","⥧":"⥧","⥋":"⥋","↲":"↲","≤":"≤","←":"â†","↢":"↢","↽":"↽","↼":"↼","⇇":"⇇","↔":"↔","⇆":"⇆","⇋":"⇋","↭":"↭","⋋":"â‹‹","⋚":"⋚","≤":"≤","≦":"≦","⩽":"⩽","⩽":"⩽","⪨":"⪨","⩿":"â©¿","⪁":"âª","⪃":"⪃","⋚︀":"⋚︀","⪓":"⪓","⪅":"⪅","⋖":"â‹–","⋚":"⋚","⪋":"⪋","≶":"≶","≲":"≲","⥼":"⥼","⌊":"⌊","𝔩":"ð”©","≶":"≶","⪑":"⪑","↽":"↽","↼":"↼","⥪":"⥪","▄":"â–„","љ":"Ñ™","≪":"≪","⇇":"⇇","⌞":"⌞","⥫":"⥫","◺":"â—º","ŀ":"Å€","⎰":"⎰","⎰":"⎰","≨":"≨","⪉":"⪉","⪉":"⪉","⪇":"⪇","⪇":"⪇","≨":"≨","⋦":"⋦","⟬":"⟬","⇽":"⇽","⟦":"⟦","⟵":"⟵","⟷":"⟷","⟼":"⟼","⟶":"⟶","↫":"↫","↬":"↬","⦅":"⦅","𝕝":"ð•","⨭":"⨭","⨴":"⨴","∗":"∗","_":"_","◊":"â—Š","◊":"â—Š","⧫":"â§«","(":"(","⦓":"⦓","⇆":"⇆","⌟":"⌟","⇋":"⇋","⥭":"⥭","‎":"‎","⊿":"⊿","‹":"‹","𝓁":"ð“","↰":"↰","≲":"≲","⪍":"âª","⪏":"âª","[":"[","‘":"‘","‚":"‚","ł":"Å‚","<":"<","<":"<","⪦":"⪦","⩹":"⩹","⋖":"â‹–","⋋":"â‹‹","⋉":"⋉","⥶":"⥶","⩻":"â©»","⦖":"⦖","◃":"â—ƒ","⊴":"⊴","◂":"â—‚","⥊":"⥊","⥦":"⥦","≨︀":"≨︀","≨︀":"≨︀","∺":"∺","¯":"¯","¯":"¯","♂":"♂","✠":"✠","✠":"✠","↦":"↦","↦":"↦","↧":"↧","↤":"↤","↥":"↥","▮":"â–®","⨩":"⨩","м":"м","—":"—","∡":"∡","𝔪":"ð”ª","℧":"â„§","µ":"µ","µ":"µ","∣":"∣","*":"*","⫰":"â«°","·":"·","·":"·","−":"−","⊟":"⊟","∸":"∸","⨪":"⨪","⫛":"â«›","…":"…","∓":"∓","⊧":"⊧","𝕞":"ð•ž","∓":"∓","𝓂":"ð“‚","∾":"∾","μ":"μ","⊸":"⊸","⊸":"⊸","⋙̸":"⋙̸","≫⃒":"≫⃒","≫̸":"≫̸","⇍":"â‡","⇎":"⇎","⋘̸":"⋘̸","≪⃒":"≪⃒","≪̸":"≪̸","⇏":"â‡","⊯":"⊯","⊮":"⊮","∇":"∇","ń":"Å„","∠⃒":"∠⃒","≉":"≉","⩰̸":"⩰̸","≋̸":"≋̸","ʼn":"ʼn","≉":"≉","♮":"â™®","♮":"â™®","ℕ":"â„•"," ":" "," ":" ","≎̸":"≎̸","≏̸":"â‰Ì¸","⩃":"⩃","ň":"ň","ņ":"ņ","≇":"≇","⩭̸":"⩭̸","⩂":"â©‚","н":"н","–":"–","≠":"≠","⇗":"⇗","⤤":"⤤","↗":"↗","↗":"↗","≐̸":"â‰Ì¸","≢":"≢","⤨":"⤨","≂̸":"≂̸","∄":"∄","∄":"∄","𝔫":"ð”«","≧̸":"≧̸","≱":"≱","≱":"≱","≧̸":"≧̸","⩾̸":"⩾̸","⩾̸":"⩾̸","≵":"≵","≯":"≯","≯":"≯","⇎":"⇎","↮":"↮","⫲":"⫲","∋":"∋","⋼":"⋼","⋺":"⋺","∋":"∋","њ":"Ñš","⇍":"â‡","≦̸":"≦̸","↚":"↚","‥":"‥","≰":"≰","↚":"↚","↮":"↮","≰":"≰","≦̸":"≦̸","⩽̸":"⩽̸","⩽̸":"⩽̸","≮":"≮","≴":"≴","≮":"≮","⋪":"⋪","⋬":"⋬","∤":"∤","𝕟":"ð•Ÿ","¬":"¬","¬":"¬","∉":"∉","⋹̸":"⋹̸","⋵̸":"⋵̸","∉":"∉","⋷":"â‹·","⋶":"â‹¶","∌":"∌","∌":"∌","⋾":"⋾","⋽":"⋽","∦":"∦","∦":"∦","⫽⃥":"⫽⃥","∂̸":"∂̸","⨔":"⨔","⊀":"⊀","⋠":"â‹ ","⪯̸":"⪯̸","⊀":"⊀","⪯̸":"⪯̸","⇏":"â‡","↛":"↛","⤳̸":"⤳̸","↝̸":"â†Ì¸","↛":"↛","⋫":"â‹«","⋭":"â‹­","⊁":"âŠ","⋡":"â‹¡","⪰̸":"⪰̸","𝓃":"ð“ƒ","∤":"∤","∦":"∦","≁":"â‰","≄":"≄","≄":"≄","∤":"∤","∦":"∦","⋢":"â‹¢","⋣":"â‹£","⊄":"⊄","⫅̸":"⫅̸","⊈":"⊈","⊂⃒":"⊂⃒","⊈":"⊈","⫅̸":"⫅̸","⊁":"âŠ","⪰̸":"⪰̸","⊅":"⊅","⫆̸":"⫆̸","⊉":"⊉","⊃⃒":"⊃⃒","⊉":"⊉","⫆̸":"⫆̸","≹":"≹","ñ":"ñ","ñ":"ñ","≸":"≸","⋪":"⋪","⋬":"⋬","⋫":"â‹«","⋭":"â‹­","ν":"ν","#":"#","№":"â„–"," ":" ","⊭":"⊭","⤄":"⤄","≍⃒":"â‰âƒ’","⊬":"⊬","≥⃒":"≥⃒",">⃒":">⃒","⧞":"â§ž","⤂":"⤂","≤⃒":"≤⃒","<⃒":"<⃒","⊴⃒":"⊴⃒","⤃":"⤃","⊵⃒":"⊵⃒","∼⃒":"∼⃒","⇖":"⇖","⤣":"⤣","↖":"↖","↖":"↖","⤧":"⤧","Ⓢ":"Ⓢ","ó":"ó","ó":"ó","⊛":"⊛","⊚":"⊚","ô":"ô","ô":"ô","о":"о","⊝":"âŠ","ő":"Å‘","⨸":"⨸","⊙":"⊙","⦼":"⦼","œ":"Å“","⦿":"⦿","𝔬":"ð”¬","˛":"Ë›","ò":"ò","ò":"ò","⧁":"â§","⦵":"⦵","Ω":"Ω","∮":"∮","↺":"↺","⦾":"⦾","⦻":"⦻","‾":"‾","⧀":"â§€","ō":"Å","ω":"ω","ο":"ο","⦶":"⦶","⊖":"⊖","𝕠":"ð• ","⦷":"⦷","⦹":"⦹","⊕":"⊕","∨":"∨","↻":"↻","⩝":"â©","ℴ":"â„´","ℴ":"â„´","ª":"ª","ª":"ª","º":"º","º":"º","⊶":"⊶","⩖":"â©–","⩗":"â©—","⩛":"â©›","ℴ":"â„´","ø":"ø","ø":"ø","⊘":"⊘","õ":"õ","õ":"õ","⊗":"⊗","⨶":"⨶","ö":"ö","ö":"ö","⌽":"⌽","∥":"∥","¶":"¶","¶":"¶","∥":"∥","⫳":"⫳","⫽":"⫽","∂":"∂","п":"п","%":"%",".":".","‰":"‰","⊥":"⊥","‱":"‱","𝔭":"ð”­","φ":"φ","ϕ":"Ï•","ℳ":"ℳ","☎":"☎","π":"Ï€","⋔":"â‹”","ϖ":"Ï–","ℏ":"â„","ℎ":"ℎ","ℏ":"â„","+":"+","⨣":"⨣","⊞":"⊞","⨢":"⨢","∔":"∔","⨥":"⨥","⩲":"⩲","±":"±","±":"±","⨦":"⨦","⨧":"⨧","±":"±","⨕":"⨕","𝕡":"ð•¡","£":"£","£":"£","≺":"≺","⪳":"⪳","⪷":"⪷","≼":"≼","⪯":"⪯","≺":"≺","⪷":"⪷","≼":"≼","⪯":"⪯","⪹":"⪹","⪵":"⪵","⋨":"⋨","≾":"≾","′":"′","ℙ":"â„™","⪵":"⪵","⪹":"⪹","⋨":"⋨","∏":"âˆ","⌮":"⌮","⌒":"⌒","⌓":"⌓","∝":"âˆ","∝":"âˆ","≾":"≾","⊰":"⊰","𝓅":"ð“…","ψ":"ψ"," ":" ","𝔮":"ð”®","⨌":"⨌","𝕢":"ð•¢","⁗":"â—","𝓆":"ð“†","ℍ":"â„","⨖":"⨖","?":"?","≟":"≟",""":'"',""":'"',"⇛":"⇛","⇒":"⇒","⤜":"⤜","⤏":"â¤","⥤":"⥤","∽̱":"∽̱","ŕ":"Å•","√":"√","⦳":"⦳","⟩":"⟩","⦒":"⦒","⦥":"⦥","⟩":"⟩","»":"»","»":"»","→":"→","⥵":"⥵","⇥":"⇥","⤠":"⤠","⤳":"⤳","⤞":"⤞","↪":"↪","↬":"↬","⥅":"⥅","⥴":"⥴","↣":"↣","↝":"â†","⤚":"⤚","∶":"∶","ℚ":"ℚ","⤍":"â¤","❳":"â³","}":"}","]":"]","⦌":"⦌","⦎":"⦎","⦐":"â¦","ř":"Å™","ŗ":"Å—","⌉":"⌉","}":"}","р":"Ñ€","⤷":"⤷","⥩":"⥩","”":"â€","”":"â€","↳":"↳","ℜ":"ℜ","ℛ":"â„›","ℜ":"ℜ","ℝ":"â„","▭":"â–­","®":"®","®":"®","⥽":"⥽","⌋":"⌋","𝔯":"ð”¯","⇁":"â‡","⇀":"⇀","⥬":"⥬","ρ":"Ï","ϱ":"ϱ","→":"→","↣":"↣","⇁":"â‡","⇀":"⇀","⇄":"⇄","⇌":"⇌","⇉":"⇉","↝":"â†","⋌":"⋌","˚":"Ëš","≓":"≓","⇄":"⇄","⇌":"⇌","‏":"â€","⎱":"⎱","⎱":"⎱","⫮":"â«®","⟭":"⟭","⇾":"⇾","⟧":"⟧","⦆":"⦆","𝕣":"ð•£","⨮":"⨮","⨵":"⨵",")":")","⦔":"⦔","⨒":"⨒","⇉":"⇉","›":"›","𝓇":"ð“‡","↱":"↱","]":"]","’":"’","’":"’","⋌":"⋌","⋊":"⋊","▹":"â–¹","⊵":"⊵","▸":"â–¸","⧎":"â§Ž","⥨":"⥨","℞":"℞","ś":"Å›","‚":"‚","≻":"≻","⪴":"⪴","⪸":"⪸","š":"Å¡","≽":"≽","⪰":"⪰","ş":"ÅŸ","ŝ":"Å","⪶":"⪶","⪺":"⪺","⋩":"â‹©","⨓":"⨓","≿":"≿","с":"Ñ","⋅":"â‹…","⊡":"⊡","⩦":"⩦","⇘":"⇘","⤥":"⤥","↘":"↘","↘":"↘","§":"§","§":"§",";":";","⤩":"⤩","∖":"∖","∖":"∖","✶":"✶","𝔰":"ð”°","⌢":"⌢","♯":"♯","щ":"щ","ш":"ш","∣":"∣","∥":"∥","­":"­","­":"­","σ":"σ","ς":"Ï‚","ς":"Ï‚","∼":"∼","⩪":"⩪","≃":"≃","≃":"≃","⪞":"⪞","⪠":"⪠","⪝":"âª","⪟":"⪟","≆":"≆","⨤":"⨤","⥲":"⥲","←":"â†","∖":"∖","⨳":"⨳","⧤":"⧤","∣":"∣","⌣":"⌣","⪪":"⪪","⪬":"⪬","⪬︀":"⪬︀","ь":"ÑŒ","/":"/","⧄":"â§„","⌿":"⌿","𝕤":"ð•¤","♠":"â™ ","♠":"â™ ","∥":"∥","⊓":"⊓","⊓︀":"⊓︀","⊔":"⊔","⊔︀":"⊔︀","⊏":"âŠ","⊑":"⊑","⊏":"âŠ","⊑":"⊑","⊐":"âŠ","⊒":"⊒","⊐":"âŠ","⊒":"⊒","□":"â–¡","□":"â–¡","▪":"â–ª","▪":"â–ª","→":"→","𝓈":"ð“ˆ","∖":"∖","⌣":"⌣","⋆":"⋆","☆":"☆","★":"★","ϵ":"ϵ","ϕ":"Ï•","¯":"¯","⊂":"⊂","⫅":"â«…","⪽":"⪽","⊆":"⊆","⫃":"⫃","⫁":"â«","⫋":"â«‹","⊊":"⊊","⪿":"⪿","⥹":"⥹","⊂":"⊂","⊆":"⊆","⫅":"â«…","⊊":"⊊","⫋":"â«‹","⫇":"⫇","⫕":"â«•","⫓":"â«“","≻":"≻","⪸":"⪸","≽":"≽","⪰":"⪰","⪺":"⪺","⪶":"⪶","⋩":"â‹©","≿":"≿","∑":"∑","♪":"♪","¹":"¹","¹":"¹","²":"²","²":"²","³":"³","³":"³","⊃":"⊃","⫆":"⫆","⪾":"⪾","⫘":"⫘","⊇":"⊇","⫄":"â«„","⟉":"⟉","⫗":"â«—","⥻":"⥻","⫂":"â«‚","⫌":"⫌","⊋":"⊋","⫀":"â«€","⊃":"⊃","⊇":"⊇","⫆":"⫆","⊋":"⊋","⫌":"⫌","⫈":"⫈","⫔":"â«”","⫖":"â«–","⇙":"⇙","⤦":"⤦","↙":"↙","↙":"↙","⤪":"⤪","ß":"ß","ß":"ß","⌖":"⌖","τ":"Ï„","⎴":"⎴","ť":"Å¥","ţ":"Å£","т":"Ñ‚","⃛":"⃛","⌕":"⌕","𝔱":"ð”±","∴":"∴","∴":"∴","θ":"θ","ϑ":"Ï‘","ϑ":"Ï‘","≈":"≈","∼":"∼"," ":" ","≈":"≈","∼":"∼","þ":"þ","þ":"þ","˜":"Ëœ","×":"×","×":"×","⊠":"⊠","⨱":"⨱","⨰":"⨰","∭":"∭","⤨":"⤨","⊤":"⊤","⌶":"⌶","⫱":"⫱","𝕥":"ð•¥","⫚":"⫚","⤩":"⤩","‴":"‴","™":"â„¢","▵":"â–µ","▿":"â–¿","◃":"â—ƒ","⊴":"⊴","≜":"≜","▹":"â–¹","⊵":"⊵","◬":"â—¬","≜":"≜","⨺":"⨺","⨹":"⨹","⧍":"â§","⨻":"⨻","⏢":"â¢","𝓉":"ð“‰","ц":"ц","ћ":"Ñ›","ŧ":"ŧ","≬":"≬","↞":"↞","↠":"↠","⇑":"⇑","⥣":"⥣","ú":"ú","ú":"ú","↑":"↑","ў":"Ñž","ŭ":"Å­","û":"û","û":"û","у":"у","⇅":"⇅","ű":"ű","⥮":"⥮","⥾":"⥾","𝔲":"ð”²","ù":"ù","ù":"ù","↿":"↿","↾":"↾","▀":"â–€","⌜":"⌜","⌜":"⌜","⌏":"âŒ","◸":"â—¸","ū":"Å«","¨":"¨","¨":"¨","ų":"ų","𝕦":"ð•¦","↑":"↑","↕":"↕","↿":"↿","↾":"↾","⊎":"⊎","υ":"Ï…","ϒ":"Ï’","υ":"Ï…","⇈":"⇈","⌝":"âŒ","⌝":"âŒ","⌎":"⌎","ů":"ů","◹":"â—¹","𝓊":"ð“Š","⋰":"â‹°","ũ":"Å©","▵":"â–µ","▴":"â–´","⇈":"⇈","ü":"ü","ü":"ü","⦧":"⦧","⇕":"⇕","⫨":"⫨","⫩":"â«©","⊨":"⊨","⦜":"⦜","ϵ":"ϵ","ϰ":"ϰ","∅":"∅","ϕ":"Ï•","ϖ":"Ï–","∝":"âˆ","↕":"↕","ϱ":"ϱ","ς":"Ï‚","⊊︀":"⊊︀","⫋︀":"⫋︀","⊋︀":"⊋︀","⫌︀":"⫌︀","ϑ":"Ï‘","⊲":"⊲","⊳":"⊳","в":"в","⊢":"⊢","∨":"∨","⊻":"⊻","≚":"≚","⋮":"â‹®","|":"|","|":"|","𝔳":"ð”³","⊲":"⊲","⊂⃒":"⊂⃒","⊃⃒":"⊃⃒","𝕧":"ð•§","∝":"âˆ","⊳":"⊳","𝓋":"ð“‹","⫋︀":"⫋︀","⊊︀":"⊊︀","⫌︀":"⫌︀","⊋︀":"⊋︀","⦚":"⦚","ŵ":"ŵ","⩟":"⩟","∧":"∧","≙":"≙","℘":"℘","𝔴":"ð”´","𝕨":"ð•¨","℘":"℘","≀":"≀","≀":"≀","𝓌":"ð“Œ","⋂":"â‹‚","◯":"â—¯","⋃":"⋃","▽":"â–½","𝔵":"ð”µ","⟺":"⟺","⟷":"⟷","ξ":"ξ","⟸":"⟸","⟵":"⟵","⟼":"⟼","⋻":"â‹»","⨀":"⨀","𝕩":"ð•©","⨁":"â¨","⨂":"⨂","⟹":"⟹","⟶":"⟶","𝓍":"ð“","⨆":"⨆","⨄":"⨄","△":"â–³","⋁":"â‹","⋀":"â‹€","ý":"ý","ý":"ý","я":"Ñ","ŷ":"Å·","ы":"Ñ‹","¥":"Â¥","¥":"Â¥","𝔶":"ð”¶","ї":"Ñ—","𝕪":"ð•ª","𝓎":"ð“Ž","ю":"ÑŽ","ÿ":"ÿ","ÿ":"ÿ","ź":"ź","ž":"ž","з":"з","ż":"ż","ℨ":"ℨ","ζ":"ζ","𝔷":"ð”·","ж":"ж","⇝":"â‡","𝕫":"ð•«","𝓏":"ð“","‍":"â€","‌":"‌"},characters:{"Æ":"Æ","&":"&","Ã":"Á","Ä‚":"Ă","Â":"Â","Ð":"А","ð”„":"𝔄","À":"À","Α":"Α","Ä€":"Ā","â©“":"⩓","Ä„":"Ą","ð”¸":"𝔸","â¡":"⁡","Ã…":"Å","ð’œ":"𝒜","≔":"≔","Ã":"Ã","Ä":"Ä","∖":"∖","â«§":"⫧","⌆":"⌆","Б":"Б","∵":"∵","ℬ":"ℬ","Î’":"Β","ð”…":"𝔅","ð”¹":"𝔹","˘":"˘","≎":"≎","Ч":"Ч","©":"©","Ć":"Ć","â‹’":"⋒","â……":"ⅅ","â„­":"ℭ","ÄŒ":"Č","Ç":"Ç","Ĉ":"Ĉ","∰":"∰","ÄŠ":"Ċ","¸":"¸","·":"·","Χ":"Χ","⊙":"⊙","⊖":"⊖","⊕":"⊕","⊗":"⊗","∲":"∲","â€":"”","’":"’","∷":"∷","â©´":"⩴","≡":"≡","∯":"∯","∮":"∮","â„‚":"ℂ","âˆ":"∐","∳":"∳","⨯":"⨯","ð’ž":"𝒞","â‹“":"⋓","â‰":"≍","⤑":"⤑","Ђ":"Ђ","Ð…":"Ѕ","Ð":"Џ","‡":"‡","↡":"↡","⫤":"⫤","ÄŽ":"Ď","Д":"Д","∇":"∇","Δ":"Δ","ð”‡":"𝔇","´":"´","Ë™":"˙","Ë":"˝","`":"`","Ëœ":"˜","â‹„":"⋄","â…†":"ⅆ","ð”»":"𝔻","¨":"¨","⃜":"⃜","â‰":"≐","⇓":"⇓","â‡":"⇐","⇔":"⇔","⟸":"⟸","⟺":"⟺","⟹":"⟹","⇒":"⇒","⊨":"⊨","⇑":"⇑","⇕":"⇕","∥":"∥","↓":"↓","⤓":"⤓","⇵":"⇵","Ì‘":"̑","â¥":"⥐","⥞":"⥞","↽":"↽","⥖":"⥖","⥟":"⥟","â‡":"⇁","⥗":"⥗","⊤":"⊤","↧":"↧","ð’Ÿ":"𝒟","Ä":"Đ","ÅŠ":"Ŋ","Ã":"Ð","É":"É","Äš":"Ě","Ê":"Ê","Э":"Э","Ä–":"Ė","ð”ˆ":"𝔈","È":"È","∈":"∈","Ä’":"Ē","â—»":"◻","â–«":"▫","Ę":"Ę","ð”¼":"𝔼","Ε":"Ε","⩵":"⩵","≂":"≂","⇌":"⇌","â„°":"ℰ","⩳":"⩳","Η":"Η","Ë":"Ë","∃":"∃","â…‡":"ⅇ","Ф":"Ф","ð”‰":"𝔉","â—¼":"◼","â–ª":"▪","ð”½":"𝔽","∀":"∀","ℱ":"ℱ","Ѓ":"Ѓ",">":">","Γ":"Γ","Ïœ":"Ϝ","Äž":"Ğ","Ä¢":"Ģ","Äœ":"Ĝ","Г":"Г","Ä ":"Ġ","ð”Š":"𝔊","â‹™":"⋙","ð”¾":"𝔾","≥":"≥","â‹›":"⋛","≧":"≧","⪢":"⪢","≷":"≷","⩾":"⩾","≳":"≳","ð’¢":"𝒢","≫":"≫","Ъ":"Ъ","ˇ":"ˇ","^":"^","Ĥ":"Ĥ","ℌ":"ℌ","â„‹":"ℋ","â„":"ℍ","─":"─","Ħ":"Ħ","â‰":"≏","Е":"Е","IJ":"IJ","Ð":"Ё","Ã":"Í","ÃŽ":"Î","И":"И","İ":"İ","â„‘":"ℑ","ÃŒ":"Ì","Ī":"Ī","â…ˆ":"ⅈ","∬":"∬","∫":"∫","â‹‚":"⋂","â£":"⁣","â¢":"⁢","Ä®":"Į","ð•€":"𝕀","Ι":"Ι","â„":"ℐ","Ĩ":"Ĩ","І":"І","Ã":"Ï","Ä´":"Ĵ","Й":"Й","ð”":"𝔍","ð•":"𝕁","ð’¥":"𝒥","Ј":"Ј","Є":"Є","Ð¥":"Х","ÐŒ":"Ќ","Κ":"Κ","Ķ":"Ķ","К":"К","ð”Ž":"𝔎","ð•‚":"𝕂","ð’¦":"𝒦","Љ":"Љ","<":"<","Ĺ":"Ĺ","Λ":"Λ","⟪":"⟪","â„’":"ℒ","↞":"↞","Ľ":"Ľ","Ä»":"Ļ","Л":"Л","⟨":"⟨","â†":"←","⇤":"⇤","⇆":"⇆","⌈":"⌈","⟦":"⟦","⥡":"⥡","⇃":"⇃","⥙":"⥙","⌊":"⌊","↔":"↔","⥎":"⥎","⊣":"⊣","↤":"↤","⥚":"⥚","⊲":"⊲","â§":"⧏","⊴":"⊴","⥑":"⥑","⥠":"⥠","↿":"↿","⥘":"⥘","↼":"↼","⥒":"⥒","⋚":"⋚","≦":"≦","≶":"≶","⪡":"⪡","⩽":"⩽","≲":"≲","ð”":"𝔏","⋘":"⋘","⇚":"⇚","Ä¿":"Ŀ","⟵":"⟵","⟷":"⟷","⟶":"⟶","ð•ƒ":"𝕃","↙":"↙","↘":"↘","↰":"↰","Å":"Ł","≪":"≪","⤅":"⤅","М":"М","âŸ":" ","ℳ":"ℳ","ð”":"𝔐","∓":"∓","ð•„":"𝕄","Μ":"Μ","Њ":"Њ","Ń":"Ń","Ň":"Ň","Å…":"Ņ","Ð":"Н","​":"​","\n":" ","ð”‘":"𝔑","â ":"⁠"," ":" ","â„•":"ℕ","⫬":"⫬","≢":"≢","≭":"≭","∦":"∦","∉":"∉","≠":"≠","≂̸":"≂̸","∄":"∄","≯":"≯","≱":"≱","≧̸":"≧̸","≫̸":"≫̸","≹":"≹","⩾̸":"⩾̸","≵":"≵","≎̸":"≎̸","â‰Ì¸":"≏̸","⋪":"⋪","â§Ì¸":"⧏̸","⋬":"⋬","≮":"≮","≰":"≰","≸":"≸","≪̸":"≪̸","⩽̸":"⩽̸","≴":"≴","⪢̸":"⪢̸","⪡̸":"⪡̸","⊀":"⊀","⪯̸":"⪯̸","â‹ ":"⋠","∌":"∌","â‹«":"⋫","â§Ì¸":"⧐̸","â‹­":"⋭","âŠÌ¸":"⊏̸","â‹¢":"⋢","âŠÌ¸":"⊐̸","â‹£":"⋣","⊂⃒":"⊂⃒","⊈":"⊈","âŠ":"⊁","⪰̸":"⪰̸","â‹¡":"⋡","≿̸":"≿̸","⊃⃒":"⊃⃒","⊉":"⊉","â‰":"≁","≄":"≄","≇":"≇","≉":"≉","∤":"∤","ð’©":"𝒩","Ñ":"Ñ","Î":"Ν","Å’":"Œ","Ó":"Ó","Ô":"Ô","О":"О","Å":"Ő","ð”’":"𝔒","Ã’":"Ò","ÅŒ":"Ō","Ω":"Ω","Ο":"Ο","ð•†":"𝕆","“":"“","‘":"‘","â©”":"⩔","ð’ª":"𝒪","Ø":"Ø","Õ":"Õ","⨷":"⨷","Ö":"Ö","‾":"‾","âž":"⏞","⎴":"⎴","âœ":"⏜","∂":"∂","П":"П","ð”“":"𝔓","Φ":"Φ","Π":"Π","±":"±","â„™":"ℙ","⪻":"⪻","≺":"≺","⪯":"⪯","≼":"≼","≾":"≾","″":"″","âˆ":"∏","âˆ":"∝","ð’«":"𝒫","Ψ":"Ψ",'"':""","ð””":"𝔔","ℚ":"ℚ","ð’¬":"𝒬","â¤":"⤐","®":"®","Å”":"Ŕ","⟫":"⟫","↠":"↠","⤖":"⤖","Ř":"Ř","Å–":"Ŗ","Р":"Р","ℜ":"ℜ","∋":"∋","⇋":"⇋","⥯":"⥯","Ρ":"Ρ","⟩":"⟩","→":"→","⇥":"⇥","⇄":"⇄","⌉":"⌉","⟧":"⟧","â¥":"⥝","⇂":"⇂","⥕":"⥕","⌋":"⌋","⊢":"⊢","↦":"↦","⥛":"⥛","⊳":"⊳","â§":"⧐","⊵":"⊵","â¥":"⥏","⥜":"⥜","↾":"↾","⥔":"⥔","⇀":"⇀","⥓":"⥓","â„":"ℝ","⥰":"⥰","⇛":"⇛","â„›":"ℛ","↱":"↱","â§´":"⧴","Щ":"Щ","Ш":"Ш","Ь":"Ь","Åš":"Ś","⪼":"⪼","Å ":"Š","Åž":"Ş","Åœ":"Ŝ","С":"С","ð”–":"𝔖","↑":"↑","Σ":"Σ","∘":"∘","ð•Š":"𝕊","√":"√","â–¡":"□","⊓":"⊓","âŠ":"⊏","⊑":"⊑","âŠ":"⊐","⊒":"⊒","⊔":"⊔","ð’®":"𝒮","⋆":"⋆","â‹":"⋐","⊆":"⊆","≻":"≻","⪰":"⪰","≽":"≽","≿":"≿","∑":"∑","â‹‘":"⋑","⊃":"⊃","⊇":"⊇","Þ":"Þ","â„¢":"™","Ћ":"Ћ","Ц":"Ц","\t":" ","Τ":"Τ","Ť":"Ť","Å¢":"Ţ","Т":"Т","ð”—":"𝔗","∴":"∴","Θ":"Θ","âŸâ€Š":"  "," ":" ","∼":"∼","≃":"≃","≅":"≅","≈":"≈","ð•‹":"𝕋","⃛":"⃛","ð’¯":"𝒯","Ŧ":"Ŧ","Ú":"Ú","↟":"↟","⥉":"⥉","ÐŽ":"Ў","Ŭ":"Ŭ","Û":"Û","У":"У","Ű":"Ű","ð”˜":"𝔘","Ù":"Ù","Ū":"Ū",_:"_","âŸ":"⏟","⎵":"⎵","â":"⏝","⋃":"⋃","⊎":"⊎","Ų":"Ų","ð•Œ":"𝕌","⤒":"⤒","⇅":"⇅","↕":"↕","⥮":"⥮","⊥":"⊥","↥":"↥","↖":"↖","↗":"↗","Ï’":"ϒ","Î¥":"Υ","Å®":"Ů","ð’°":"𝒰","Ũ":"Ũ","Ü":"Ü","⊫":"⊫","â««":"⫫","Ð’":"В","⊩":"⊩","⫦":"⫦","â‹":"⋁","‖":"‖","∣":"∣","|":"|","â˜":"❘","≀":"≀"," ":" ","ð”™":"𝔙","ð•":"𝕍","ð’±":"𝒱","⊪":"⊪","Å´":"Ŵ","â‹€":"⋀","ð”š":"𝔚","ð•Ž":"𝕎","ð’²":"𝒲","ð”›":"𝔛","Ξ":"Ξ","ð•":"𝕏","ð’³":"𝒳","Я":"Я","Ї":"Ї","Ю":"Ю","Ã":"Ý","Ŷ":"Ŷ","Ы":"Ы","ð”œ":"𝔜","ð•":"𝕐","ð’´":"𝒴","Ÿ":"Ÿ","Ж":"Ж","Ź":"Ź","Ž":"Ž","З":"З","Å»":"Ż","Ζ":"Ζ","ℨ":"ℨ","ℤ":"ℤ","ð’µ":"𝒵","á":"á","ă":"ă","∾":"∾","∾̳":"∾̳","∿":"∿","â":"â","а":"а","æ":"æ","ð”ž":"𝔞","à":"à","ℵ":"ℵ","α":"α","Ä":"ā","⨿":"⨿","∧":"∧","â©•":"⩕","⩜":"⩜","⩘":"⩘","⩚":"⩚","∠":"∠","⦤":"⦤","∡":"∡","⦨":"⦨","⦩":"⦩","⦪":"⦪","⦫":"⦫","⦬":"⦬","⦭":"⦭","⦮":"⦮","⦯":"⦯","∟":"∟","⊾":"⊾","â¦":"⦝","∢":"∢","â¼":"⍼","Ä…":"ą","ð•’":"𝕒","â©°":"⩰","⩯":"⩯","≊":"≊","≋":"≋","'":"'","Ã¥":"å","ð’¶":"𝒶","*":"*","ã":"ã","ä":"ä","⨑":"⨑","â«­":"⫭","≌":"≌","϶":"϶","‵":"‵","∽":"∽","â‹":"⋍","⊽":"⊽","⌅":"⌅","⎶":"⎶","б":"б","„":"„","⦰":"⦰","β":"β","â„¶":"ℶ","≬":"≬","ð”Ÿ":"𝔟","â—¯":"◯","⨀":"⨀","â¨":"⨁","⨂":"⨂","⨆":"⨆","★":"★","â–½":"▽","â–³":"△","⨄":"⨄","â¤":"⤍","â§«":"⧫","â–´":"▴","â–¾":"▾","â—‚":"◂","â–¸":"▸","â£":"␣","â–’":"▒","â–‘":"░","â–“":"▓","â–ˆ":"█","=⃥":"=⃥","≡⃥":"≡⃥","âŒ":"⌐","ð•“":"𝕓","⋈":"⋈","â•—":"╗","â•”":"╔","â•–":"╖","â•“":"╓","â•":"═","╦":"╦","â•©":"╩","╤":"╤","â•§":"╧","â•":"╝","╚":"╚","╜":"╜","â•™":"╙","â•‘":"║","╬":"╬","â•£":"╣","â• ":"╠","â•«":"╫","â•¢":"╢","╟":"╟","⧉":"⧉","â••":"╕","â•’":"╒","â”":"┐","┌":"┌","â•¥":"╥","╨":"╨","┬":"┬","â”´":"┴","⊟":"⊟","⊞":"⊞","⊠":"⊠","â•›":"╛","╘":"╘","┘":"┘","â””":"└","│":"│","╪":"╪","â•¡":"╡","╞":"╞","┼":"┼","┤":"┤","├":"├","¦":"¦","ð’·":"𝒷","â":"⁏","\\":"\","â§…":"⧅","⟈":"⟈","•":"•","⪮":"⪮","ć":"ć","∩":"∩","â©„":"⩄","⩉":"⩉","â©‹":"⩋","⩇":"⩇","â©€":"⩀","∩︀":"∩︀","â":"⁁","â©":"⩍","Ä":"č","ç":"ç","ĉ":"ĉ","⩌":"⩌","â©":"⩐","Ä‹":"ċ","⦲":"⦲","¢":"¢","ð” ":"𝔠","ч":"ч","✓":"✓","χ":"χ","â—‹":"○","⧃":"⧃","ˆ":"ˆ","≗":"≗","↺":"↺","↻":"↻","Ⓢ":"Ⓢ","⊛":"⊛","⊚":"⊚","âŠ":"⊝","â¨":"⨐","⫯":"⫯","â§‚":"⧂","♣":"♣",":":":",",":",","@":"@","âˆ":"∁","â©­":"⩭","ð•”":"𝕔","â„—":"℗","↵":"↵","✗":"✗","ð’¸":"𝒸","â«":"⫏","â«‘":"⫑","â«":"⫐","â«’":"⫒","⋯":"⋯","⤸":"⤸","⤵":"⤵","⋞":"⋞","⋟":"⋟","↶":"↶","⤽":"⤽","∪":"∪","⩈":"⩈","⩆":"⩆","⩊":"⩊","âŠ":"⊍","â©…":"⩅","∪︀":"∪︀","↷":"↷","⤼":"⤼","⋎":"⋎","â‹":"⋏","¤":"¤","∱":"∱","⌭":"⌭","⥥":"⥥","†":"†","ℸ":"ℸ","â€":"‐","â¤":"⤏","Ä":"ď","д":"д","⇊":"⇊","â©·":"⩷","°":"°","δ":"δ","⦱":"⦱","⥿":"⥿","ð”¡":"𝔡","♦":"♦","Ï":"ϝ","⋲":"⋲","÷":"÷","⋇":"⋇","Ñ’":"ђ","⌞":"⌞","âŒ":"⌍",$:"$","ð••":"𝕕","≑":"≑","∸":"∸","∔":"∔","⊡":"⊡","⌟":"⌟","⌌":"⌌","ð’¹":"𝒹","Ñ•":"ѕ","â§¶":"⧶","Ä‘":"đ","⋱":"⋱","â–¿":"▿","⦦":"⦦","ÑŸ":"џ","⟿":"⟿","é":"é","â©®":"⩮","Ä›":"ě","≖":"≖","ê":"ê","≕":"≕","Ñ":"э","Ä—":"ė","≒":"≒","ð”¢":"𝔢","⪚":"⪚","è":"è","⪖":"⪖","⪘":"⪘","⪙":"⪙","â§":"⏧","â„“":"ℓ","⪕":"⪕","⪗":"⪗","Ä“":"ē","∅":"∅"," ":" "," ":" "," ":" ","Å‹":"ŋ"," ":" ","Ä™":"ę","ð•–":"𝕖","â‹•":"⋕","â§£":"⧣","⩱":"⩱","ε":"ε","ϵ":"ϵ","=":"=","≟":"≟","⩸":"⩸","â§¥":"⧥","≓":"≓","⥱":"⥱","ℯ":"ℯ","η":"η","ð":"ð","ë":"ë","€":"€","!":"!","Ñ„":"ф","♀":"♀","ffi":"ffi","ff":"ff","ffl":"ffl","ð”£":"𝔣","ï¬":"fi",fj:"fj","â™­":"♭","fl":"fl","â–±":"▱","Æ’":"ƒ","ð•—":"𝕗","â‹”":"⋔","â«™":"⫙","â¨":"⨍","½":"½","â…“":"⅓","¼":"¼","â…•":"⅕","â…™":"⅙","â…›":"⅛","â…”":"⅔","â…–":"⅖","¾":"¾","â…—":"⅗","â…œ":"⅜","â…˜":"⅘","â…š":"⅚","â…":"⅝","â…ž":"⅞","â„":"⁄","⌢":"⌢","ð’»":"𝒻","⪌":"⪌","ǵ":"ǵ","γ":"γ","⪆":"⪆","ÄŸ":"ğ","Ä":"ĝ","г":"г","Ä¡":"ġ","⪩":"⪩","⪀":"⪀","⪂":"⪂","⪄":"⪄","⋛︀":"⋛︀","⪔":"⪔","ð”¤":"𝔤","â„·":"ℷ","Ñ“":"ѓ","⪒":"⪒","⪥":"⪥","⪤":"⪤","≩":"≩","⪊":"⪊","⪈":"⪈","â‹§":"⋧","ð•˜":"𝕘","ℊ":"ℊ","⪎":"⪎","âª":"⪐","⪧":"⪧","⩺":"⩺","â‹—":"⋗","⦕":"⦕","⩼":"⩼","⥸":"⥸","≩︀":"≩︀","ÑŠ":"ъ","⥈":"⥈","↭":"↭","â„":"ℏ","Ä¥":"ĥ","♥":"♥","…":"…","⊹":"⊹","ð”¥":"𝔥","⤥":"⤥","⤦":"⤦","⇿":"⇿","∻":"∻","↩":"↩","↪":"↪","ð•™":"𝕙","―":"―","ð’½":"𝒽","ħ":"ħ","âƒ":"⁃","í":"í","î":"î","и":"и","е":"е","¡":"¡","ð”¦":"𝔦","ì":"ì","⨌":"⨌","∭":"∭","â§œ":"⧜","â„©":"℩","ij":"ij","Ä«":"ī","ı":"ı","⊷":"⊷","Ƶ":"Ƶ","â„…":"℅","∞":"∞","â§":"⧝","⊺":"⊺","⨗":"⨗","⨼":"⨼","Ñ‘":"ё","į":"į","ð•š":"𝕚","ι":"ι","¿":"¿","ð’¾":"𝒾","⋹":"⋹","⋵":"⋵","â‹´":"⋴","⋳":"⋳","Ä©":"ĩ","Ñ–":"і","ï":"ï","ĵ":"ĵ","й":"й","ð”§":"𝔧","È·":"ȷ","ð•›":"𝕛","ð’¿":"𝒿","ј":"ј","Ñ”":"є","κ":"κ","ϰ":"ϰ","Ä·":"ķ","к":"к","ð”¨":"𝔨","ĸ":"ĸ","Ñ…":"х","Ñœ":"ќ","ð•œ":"𝕜","ð“€":"𝓀","⤛":"⤛","⤎":"⤎","⪋":"⪋","⥢":"⥢","ĺ":"ĺ","⦴":"⦴","λ":"λ","⦑":"⦑","⪅":"⪅","«":"«","⤟":"⤟","â¤":"⤝","↫":"↫","⤹":"⤹","⥳":"⥳","↢":"↢","⪫":"⪫","⤙":"⤙","⪭":"⪭","⪭︀":"⪭︀","⤌":"⤌","â²":"❲","{":"{","[":"[","⦋":"⦋","â¦":"⦏","â¦":"⦍","ľ":"ľ","ļ":"ļ","л":"л","⤶":"⤶","⥧":"⥧","⥋":"⥋","↲":"↲","≤":"≤","⇇":"⇇","â‹‹":"⋋","⪨":"⪨","â©¿":"⩿","âª":"⪁","⪃":"⪃","⋚︀":"⋚︀","⪓":"⪓","â‹–":"⋖","⥼":"⥼","ð”©":"𝔩","⪑":"⪑","⥪":"⥪","â–„":"▄","Ñ™":"љ","⥫":"⥫","â—º":"◺","Å€":"ŀ","⎰":"⎰","≨":"≨","⪉":"⪉","⪇":"⪇","⋦":"⋦","⟬":"⟬","⇽":"⇽","⟼":"⟼","↬":"↬","⦅":"⦅","ð•":"𝕝","⨭":"⨭","⨴":"⨴","∗":"∗","â—Š":"◊","(":"(","⦓":"⦓","⥭":"⥭","‎":"‎","⊿":"⊿","‹":"‹","ð“":"𝓁","âª":"⪍","âª":"⪏","‚":"‚","Å‚":"ł","⪦":"⪦","⩹":"⩹","⋉":"⋉","⥶":"⥶","â©»":"⩻","⦖":"⦖","â—ƒ":"◃","⥊":"⥊","⥦":"⥦","≨︀":"≨︀","∺":"∺","¯":"¯","♂":"♂","✠":"✠","â–®":"▮","⨩":"⨩","м":"м","—":"—","ð”ª":"𝔪","â„§":"℧","µ":"µ","â«°":"⫰","−":"−","⨪":"⨪","â«›":"⫛","⊧":"⊧","ð•ž":"𝕞","ð“‚":"𝓂","μ":"μ","⊸":"⊸","⋙̸":"⋙̸","≫⃒":"≫⃒","â‡":"⇍","⇎":"⇎","⋘̸":"⋘̸","≪⃒":"≪⃒","â‡":"⇏","⊯":"⊯","⊮":"⊮","Å„":"ń","∠⃒":"∠⃒","⩰̸":"⩰̸","≋̸":"≋̸","ʼn":"ʼn","â™®":"♮","⩃":"⩃","ň":"ň","ņ":"ņ","⩭̸":"⩭̸","â©‚":"⩂","н":"н","–":"–","⇗":"⇗","⤤":"⤤","â‰Ì¸":"≐̸","⤨":"⤨","ð”«":"𝔫","↮":"↮","⫲":"⫲","⋼":"⋼","⋺":"⋺","Ñš":"њ","≦̸":"≦̸","↚":"↚","‥":"‥","ð•Ÿ":"𝕟","¬":"¬","⋹̸":"⋹̸","⋵̸":"⋵̸","â‹·":"⋷","â‹¶":"⋶","⋾":"⋾","⋽":"⋽","⫽⃥":"⫽⃥","∂̸":"∂̸","⨔":"⨔","↛":"↛","⤳̸":"⤳̸","â†Ì¸":"↝̸","ð“ƒ":"𝓃","⊄":"⊄","⫅̸":"⫅̸","⊅":"⊅","⫆̸":"⫆̸","ñ":"ñ","ν":"ν","#":"#","â„–":"№"," ":" ","⊭":"⊭","⤄":"⤄","â‰âƒ’":"≍⃒","⊬":"⊬","≥⃒":"≥⃒",">⃒":">⃒","â§ž":"⧞","⤂":"⤂","≤⃒":"≤⃒","<⃒":"<⃒","⊴⃒":"⊴⃒","⤃":"⤃","⊵⃒":"⊵⃒","∼⃒":"∼⃒","⇖":"⇖","⤣":"⤣","⤧":"⤧","ó":"ó","ô":"ô","о":"о","Å‘":"ő","⨸":"⨸","⦼":"⦼","Å“":"œ","⦿":"⦿","ð”¬":"𝔬","Ë›":"˛","ò":"ò","â§":"⧁","⦵":"⦵","⦾":"⦾","⦻":"⦻","â§€":"⧀","Å":"ō","ω":"ω","ο":"ο","⦶":"⦶","ð• ":"𝕠","⦷":"⦷","⦹":"⦹","∨":"∨","â©":"⩝","â„´":"ℴ","ª":"ª","º":"º","⊶":"⊶","â©–":"⩖","â©—":"⩗","â©›":"⩛","ø":"ø","⊘":"⊘","õ":"õ","⨶":"⨶","ö":"ö","⌽":"⌽","¶":"¶","⫳":"⫳","⫽":"⫽","п":"п","%":"%",".":".","‰":"‰","‱":"‱","ð”­":"𝔭","φ":"φ","Ï•":"ϕ","☎":"☎","Ï€":"π","Ï–":"ϖ","ℎ":"ℎ","+":"+","⨣":"⨣","⨢":"⨢","⨥":"⨥","⩲":"⩲","⨦":"⨦","⨧":"⨧","⨕":"⨕","ð•¡":"𝕡","£":"£","⪳":"⪳","⪷":"⪷","⪹":"⪹","⪵":"⪵","⋨":"⋨","′":"′","⌮":"⌮","⌒":"⌒","⌓":"⌓","⊰":"⊰","ð“…":"𝓅","ψ":"ψ"," ":" ","ð”®":"𝔮","ð•¢":"𝕢","â—":"⁗","ð“†":"𝓆","⨖":"⨖","?":"?","⤜":"⤜","⥤":"⥤","∽̱":"∽̱","Å•":"ŕ","⦳":"⦳","⦒":"⦒","⦥":"⦥","»":"»","⥵":"⥵","⤠":"⤠","⤳":"⤳","⤞":"⤞","⥅":"⥅","⥴":"⥴","↣":"↣","â†":"↝","⤚":"⤚","∶":"∶","â³":"❳","}":"}","]":"]","⦌":"⦌","⦎":"⦎","â¦":"⦐","Å™":"ř","Å—":"ŗ","Ñ€":"р","⤷":"⤷","⥩":"⥩","↳":"↳","â–­":"▭","⥽":"⥽","ð”¯":"𝔯","⥬":"⥬","Ï":"ρ","ϱ":"ϱ","⇉":"⇉","⋌":"⋌","Ëš":"˚","â€":"‏","⎱":"⎱","â«®":"⫮","⟭":"⟭","⇾":"⇾","⦆":"⦆","ð•£":"𝕣","⨮":"⨮","⨵":"⨵",")":")","⦔":"⦔","⨒":"⨒","›":"›","ð“‡":"𝓇","⋊":"⋊","â–¹":"▹","â§Ž":"⧎","⥨":"⥨","℞":"℞","Å›":"ś","⪴":"⪴","⪸":"⪸","Å¡":"š","ÅŸ":"ş","Å":"ŝ","⪶":"⪶","⪺":"⪺","â‹©":"⋩","⨓":"⨓","Ñ":"с","â‹…":"⋅","⩦":"⩦","⇘":"⇘","§":"§",";":";","⤩":"⤩","✶":"✶","ð”°":"𝔰","♯":"♯","щ":"щ","ш":"ш","­":"­","σ":"σ","Ï‚":"ς","⩪":"⩪","⪞":"⪞","⪠":"⪠","âª":"⪝","⪟":"⪟","≆":"≆","⨤":"⨤","⥲":"⥲","⨳":"⨳","⧤":"⧤","⌣":"⌣","⪪":"⪪","⪬":"⪬","⪬︀":"⪬︀","ÑŒ":"ь","/":"/","â§„":"⧄","⌿":"⌿","ð•¤":"𝕤","â™ ":"♠","⊓︀":"⊓︀","⊔︀":"⊔︀","ð“ˆ":"𝓈","☆":"☆","⊂":"⊂","â«…":"⫅","⪽":"⪽","⫃":"⫃","â«":"⫁","â«‹":"⫋","⊊":"⊊","⪿":"⪿","⥹":"⥹","⫇":"⫇","â«•":"⫕","â«“":"⫓","♪":"♪","¹":"¹","²":"²","³":"³","⫆":"⫆","⪾":"⪾","⫘":"⫘","â«„":"⫄","⟉":"⟉","â«—":"⫗","⥻":"⥻","â«‚":"⫂","⫌":"⫌","⊋":"⊋","â«€":"⫀","⫈":"⫈","â«”":"⫔","â«–":"⫖","⇙":"⇙","⤪":"⤪","ß":"ß","⌖":"⌖","Ï„":"τ","Å¥":"ť","Å£":"ţ","Ñ‚":"т","⌕":"⌕","ð”±":"𝔱","θ":"θ","Ï‘":"ϑ","þ":"þ","×":"×","⨱":"⨱","⨰":"⨰","⌶":"⌶","⫱":"⫱","ð•¥":"𝕥","⫚":"⫚","‴":"‴","â–µ":"▵","≜":"≜","â—¬":"◬","⨺":"⨺","⨹":"⨹","â§":"⧍","⨻":"⨻","â¢":"⏢","ð“‰":"𝓉","ц":"ц","Ñ›":"ћ","ŧ":"ŧ","⥣":"⥣","ú":"ú","Ñž":"ў","Å­":"ŭ","û":"û","у":"у","ű":"ű","⥾":"⥾","ð”²":"𝔲","ù":"ù","â–€":"▀","⌜":"⌜","âŒ":"⌏","â—¸":"◸","Å«":"ū","ų":"ų","ð•¦":"𝕦","Ï…":"υ","⇈":"⇈","âŒ":"⌝","⌎":"⌎","ů":"ů","â—¹":"◹","ð“Š":"𝓊","â‹°":"⋰","Å©":"ũ","ü":"ü","⦧":"⦧","⫨":"⫨","â«©":"⫩","⦜":"⦜","⊊︀":"⊊︀","⫋︀":"⫋︀","⊋︀":"⊋︀","⫌︀":"⫌︀","в":"в","⊻":"⊻","≚":"≚","â‹®":"⋮","ð”³":"𝔳","ð•§":"𝕧","ð“‹":"𝓋","⦚":"⦚","ŵ":"ŵ","⩟":"⩟","≙":"≙","℘":"℘","ð”´":"𝔴","ð•¨":"𝕨","ð“Œ":"𝓌","ð”µ":"𝔵","ξ":"ξ","â‹»":"⋻","ð•©":"𝕩","ð“":"𝓍","ý":"ý","Ñ":"я","Å·":"ŷ","Ñ‹":"ы","Â¥":"¥","ð”¶":"𝔶","Ñ—":"ї","ð•ª":"𝕪","ð“Ž":"𝓎","ÑŽ":"ю","ÿ":"ÿ","ź":"ź","ž":"ž","з":"з","ż":"ż","ζ":"ζ","ð”·":"𝔷","ж":"ж","â‡":"⇝","ð•«":"𝕫","ð“":"𝓏","â€":"‍","‌":"‌"}}}; - -/***/ }), - -/***/ "./node_modules/html-entities/lib/numeric-unicode-map.js": -/*!***************************************************************!*\ - !*** ./node_modules/html-entities/lib/numeric-unicode-map.js ***! - \***************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.numericUnicodeMap={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376}; - -/***/ }), - -/***/ "./node_modules/html-entities/lib/surrogate-pairs.js": -/*!***********************************************************!*\ - !*** ./node_modules/html-entities/lib/surrogate-pairs.js ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.fromCodePoint=String.fromCodePoint||function(astralCodePoint){return String.fromCharCode(Math.floor((astralCodePoint-65536)/1024)+55296,(astralCodePoint-65536)%1024+56320)};exports.getCodePoint=String.prototype.codePointAt?function(input,position){return input.codePointAt(position)}:function(input,position){return(input.charCodeAt(position)-55296)*1024+input.charCodeAt(position+1)-56320+65536};exports.highSurrogateFrom=55296;exports.highSurrogateTo=56319; - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js": -/*!***************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/clients/WebSocketClient.js ***! - \***************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": function() { return /* binding */ WebSocketClient; } -/* harmony export */ }); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } - - - -var WebSocketClient = /*#__PURE__*/function () { - /** - * @param {string} url - */ - function WebSocketClient(url) { - _classCallCheck(this, WebSocketClient); - - this.client = new WebSocket(url); - - this.client.onerror = function (error) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_0__.log.error(error); - }; - } - /** - * @param {(...args: any[]) => void} f - */ - - - _createClass(WebSocketClient, [{ - key: "onOpen", - value: function onOpen(f) { - this.client.onopen = f; - } - /** - * @param {(...args: any[]) => void} f - */ - - }, { - key: "onClose", - value: function onClose(f) { - this.client.onclose = f; - } // call f with the message string as the first argument - - /** - * @param {(...args: any[]) => void} f - */ - - }, { - key: "onMessage", - value: function onMessage(f) { - this.client.onmessage = function (e) { - f(e.data); - }; - } - }]); - - return WebSocketClient; -}(); - - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/index.js?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10": -/*!**********************************************************************************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/index.js?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10 ***! - \**********************************************************************************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -var __resourceQuery = "?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! webpack/hot/log.js */ "./node_modules/webpack/hot/log.js"); -/* harmony import */ var webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/stripAnsi.js */ "./node_modules/webpack-dev-server/client/utils/stripAnsi.js"); -/* harmony import */ var _utils_parseURL_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/parseURL.js */ "./node_modules/webpack-dev-server/client/utils/parseURL.js"); -/* harmony import */ var _socket_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./socket.js */ "./node_modules/webpack-dev-server/client/socket.js"); -/* harmony import */ var _overlay_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./overlay.js */ "./node_modules/webpack-dev-server/client/overlay.js"); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -/* harmony import */ var _utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/sendMessage.js */ "./node_modules/webpack-dev-server/client/utils/sendMessage.js"); -/* harmony import */ var _utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/reloadApp.js */ "./node_modules/webpack-dev-server/client/utils/reloadApp.js"); -/* harmony import */ var _utils_createSocketURL_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/createSocketURL.js */ "./node_modules/webpack-dev-server/client/utils/createSocketURL.js"); -/* global __resourceQuery, __webpack_hash__ */ -/// - - - - - - - - - -/** - * @typedef {Object} Options - * @property {boolean} hot - * @property {boolean} liveReload - * @property {boolean} progress - * @property {boolean | { warnings?: boolean, errors?: boolean, trustedTypesPolicyName?: string }} overlay - * @property {string} [logging] - * @property {number} [reconnect] - */ - -/** - * @typedef {Object} Status - * @property {boolean} isUnloading - * @property {string} currentHash - * @property {string} [previousHash] - */ - -/** - * @type {Status} - */ - -var status = { - isUnloading: false, - // TODO Workaround for webpack v4, `__webpack_hash__` is not replaced without HotModuleReplacement - // eslint-disable-next-line camelcase - currentHash: true ? __webpack_require__.h() : 0 -}; -/** @type {Options} */ - -var options = { - hot: false, - liveReload: false, - progress: false, - overlay: false -}; -var parsedResourceQuery = (0,_utils_parseURL_js__WEBPACK_IMPORTED_MODULE_2__["default"])(__resourceQuery); - -if (parsedResourceQuery.hot === "true") { - options.hot = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Hot Module Replacement enabled."); -} - -if (parsedResourceQuery["live-reload"] === "true") { - options.liveReload = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Live Reloading enabled."); -} - -if (parsedResourceQuery.logging) { - options.logging = parsedResourceQuery.logging; -} - -if (typeof parsedResourceQuery.reconnect !== "undefined") { - options.reconnect = Number(parsedResourceQuery.reconnect); -} -/** - * @param {string} level - */ - - -function setAllLogLevel(level) { - // This is needed because the HMR logger operate separately from dev server logger - webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0___default().setLogLevel(level === "verbose" || level === "log" ? "info" : level); - (0,_utils_log_js__WEBPACK_IMPORTED_MODULE_5__.setLogLevel)(level); -} - -if (options.logging) { - setAllLogLevel(options.logging); -} - -self.addEventListener("beforeunload", function () { - status.isUnloading = true; -}); -var onSocketMessage = { - hot: function hot() { - if (parsedResourceQuery.hot === "false") { - return; - } - - options.hot = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Hot Module Replacement enabled."); - }, - liveReload: function liveReload() { - if (parsedResourceQuery["live-reload"] === "false") { - return; - } - - options.liveReload = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Live Reloading enabled."); - }, - invalid: function invalid() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("App updated. Recompiling..."); // Fixes #1042. overlay doesn't clear if errors are fixed but warnings remain. - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Invalid"); - }, - - /** - * @param {string} hash - */ - hash: function hash(_hash) { - status.previousHash = status.currentHash; - status.currentHash = _hash; - }, - logging: setAllLogLevel, - - /** - * @param {boolean} value - */ - overlay: function overlay(value) { - if (typeof document === "undefined") { - return; - } - - options.overlay = value; - }, - - /** - * @param {number} value - */ - reconnect: function reconnect(value) { - if (parsedResourceQuery.reconnect === "false") { - return; - } - - options.reconnect = value; - }, - - /** - * @param {boolean} value - */ - progress: function progress(value) { - options.progress = value; - }, - - /** - * @param {{ pluginName?: string, percent: number, msg: string }} data - */ - "progress-update": function progressUpdate(data) { - if (options.progress) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(data.pluginName ? "[".concat(data.pluginName, "] ") : "").concat(data.percent, "% - ").concat(data.msg, ".")); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Progress", data); - }, - "still-ok": function stillOk() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Nothing changed."); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("StillOk"); - }, - ok: function ok() { - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Ok"); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__["default"])(options, status); - }, - // TODO: remove in v5 in favor of 'static-changed' - - /** - * @param {string} file - */ - "content-changed": function contentChanged(file) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(file ? "\"".concat(file, "\"") : "Content", " from static directory was changed. Reloading...")); - self.location.reload(); - }, - - /** - * @param {string} file - */ - "static-changed": function staticChanged(file) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(file ? "\"".concat(file, "\"") : "Content", " from static directory was changed. Reloading...")); - self.location.reload(); - }, - - /** - * @param {Error[]} warnings - * @param {any} params - */ - warnings: function warnings(_warnings, params) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.warn("Warnings while compiling."); - - var printableWarnings = _warnings.map(function (error) { - var _formatProblem = (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.formatProblem)("warning", error), - header = _formatProblem.header, - body = _formatProblem.body; - - return "".concat(header, "\n").concat((0,_utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__["default"])(body)); - }); - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Warnings", printableWarnings); - - for (var i = 0; i < printableWarnings.length; i++) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.warn(printableWarnings[i]); - } - - var needShowOverlayForWarnings = typeof options.overlay === "boolean" ? options.overlay : options.overlay && options.overlay.warnings; - - if (needShowOverlayForWarnings) { - var trustedTypesPolicyName = typeof options.overlay === "object" && options.overlay.trustedTypesPolicyName; - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.show)("warning", _warnings, trustedTypesPolicyName || null); - } - - if (params && params.preventReloading) { - return; - } - - (0,_utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__["default"])(options, status); - }, - - /** - * @param {Error[]} errors - */ - errors: function errors(_errors) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error("Errors while compiling. Reload prevented."); - - var printableErrors = _errors.map(function (error) { - var _formatProblem2 = (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.formatProblem)("error", error), - header = _formatProblem2.header, - body = _formatProblem2.body; - - return "".concat(header, "\n").concat((0,_utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__["default"])(body)); - }); - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Errors", printableErrors); - - for (var i = 0; i < printableErrors.length; i++) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error(printableErrors[i]); - } - - var needShowOverlayForErrors = typeof options.overlay === "boolean" ? options.overlay : options.overlay && options.overlay.errors; - - if (needShowOverlayForErrors) { - var trustedTypesPolicyName = typeof options.overlay === "object" && options.overlay.trustedTypesPolicyName; - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.show)("error", _errors, trustedTypesPolicyName || null); - } - }, - - /** - * @param {Error} error - */ - error: function error(_error) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error(_error); - }, - close: function close() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Disconnected!"); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Close"); - } -}; -var socketURL = (0,_utils_createSocketURL_js__WEBPACK_IMPORTED_MODULE_8__["default"])(parsedResourceQuery); -(0,_socket_js__WEBPACK_IMPORTED_MODULE_3__["default"])(socketURL, onSocketMessage, options.reconnect); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/modules/logger/index.js": -/*!************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/modules/logger/index.js ***! - \************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -/******/ (function() { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./client-src/modules/logger/SyncBailHookFake.js": -/*!*******************************************************!*\ - !*** ./client-src/modules/logger/SyncBailHookFake.js ***! - \*******************************************************/ -/***/ (function(module) { - - -/** - * Client stub for tapable SyncBailHook - */ - -module.exports = function clientTapableSyncBailHook() { - return { - call: function call() {} - }; -}; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/Logger.js": -/*!****************************************************!*\ - !*** ./node_modules/webpack/lib/logging/Logger.js ***! - \****************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _iterableToArray(iter) { - if (typeof (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }) !== "undefined" && iter[(typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }).iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) { - arr2[i] = arr[i]; - } - - return arr2; -} - -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} - -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); - return Constructor; -} - -var LogType = Object.freeze({ - error: - /** @type {"error"} */ - "error", - // message, c style arguments - warn: - /** @type {"warn"} */ - "warn", - // message, c style arguments - info: - /** @type {"info"} */ - "info", - // message, c style arguments - log: - /** @type {"log"} */ - "log", - // message, c style arguments - debug: - /** @type {"debug"} */ - "debug", - // message, c style arguments - trace: - /** @type {"trace"} */ - "trace", - // no arguments - group: - /** @type {"group"} */ - "group", - // [label] - groupCollapsed: - /** @type {"groupCollapsed"} */ - "groupCollapsed", - // [label] - groupEnd: - /** @type {"groupEnd"} */ - "groupEnd", - // [label] - profile: - /** @type {"profile"} */ - "profile", - // [profileName] - profileEnd: - /** @type {"profileEnd"} */ - "profileEnd", - // [profileName] - time: - /** @type {"time"} */ - "time", - // name, time as [seconds, nanoseconds] - clear: - /** @type {"clear"} */ - "clear", - // no arguments - status: - /** @type {"status"} */ - "status" // message, arguments - -}); -exports.LogType = LogType; -/** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */ - -var LOG_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger raw log method"); -var TIMERS_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger times"); -var TIMERS_AGGREGATES_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger aggregated times"); - -var WebpackLogger = /*#__PURE__*/function () { - /** - * @param {function(LogTypeEnum, any[]=): void} log log function - * @param {function(string | function(): string): WebpackLogger} getChildLogger function to create child logger - */ - function WebpackLogger(log, getChildLogger) { - _classCallCheck(this, WebpackLogger); - - this[LOG_SYMBOL] = log; - this.getChildLogger = getChildLogger; - } - - _createClass(WebpackLogger, [{ - key: "error", - value: function error() { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - this[LOG_SYMBOL](LogType.error, args); - } - }, { - key: "warn", - value: function warn() { - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - this[LOG_SYMBOL](LogType.warn, args); - } - }, { - key: "info", - value: function info() { - for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - this[LOG_SYMBOL](LogType.info, args); - } - }, { - key: "log", - value: function log() { - for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - args[_key4] = arguments[_key4]; - } - - this[LOG_SYMBOL](LogType.log, args); - } - }, { - key: "debug", - value: function debug() { - for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - args[_key5] = arguments[_key5]; - } - - this[LOG_SYMBOL](LogType.debug, args); - } - }, { - key: "assert", - value: function assert(assertion) { - if (!assertion) { - for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) { - args[_key6 - 1] = arguments[_key6]; - } - - this[LOG_SYMBOL](LogType.error, args); - } - } - }, { - key: "trace", - value: function trace() { - this[LOG_SYMBOL](LogType.trace, ["Trace"]); - } - }, { - key: "clear", - value: function clear() { - this[LOG_SYMBOL](LogType.clear); - } - }, { - key: "status", - value: function status() { - for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { - args[_key7] = arguments[_key7]; - } - - this[LOG_SYMBOL](LogType.status, args); - } - }, { - key: "group", - value: function group() { - for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) { - args[_key8] = arguments[_key8]; - } - - this[LOG_SYMBOL](LogType.group, args); - } - }, { - key: "groupCollapsed", - value: function groupCollapsed() { - for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) { - args[_key9] = arguments[_key9]; - } - - this[LOG_SYMBOL](LogType.groupCollapsed, args); - } - }, { - key: "groupEnd", - value: function groupEnd() { - for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) { - args[_key10] = arguments[_key10]; - } - - this[LOG_SYMBOL](LogType.groupEnd, args); - } - }, { - key: "profile", - value: function profile(label) { - this[LOG_SYMBOL](LogType.profile, [label]); - } - }, { - key: "profileEnd", - value: function profileEnd(label) { - this[LOG_SYMBOL](LogType.profileEnd, [label]); - } - }, { - key: "time", - value: function time(label) { - this[TIMERS_SYMBOL] = this[TIMERS_SYMBOL] || new Map(); - this[TIMERS_SYMBOL].set(label, process.hrtime()); - } - }, { - key: "timeLog", - value: function timeLog(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeLog()")); - } - - var time = process.hrtime(prev); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }, { - key: "timeEnd", - value: function timeEnd(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeEnd()")); - } - - var time = process.hrtime(prev); - this[TIMERS_SYMBOL].delete(label); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }, { - key: "timeAggregate", - value: function timeAggregate(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeAggregate()")); - } - - var time = process.hrtime(prev); - this[TIMERS_SYMBOL].delete(label); - this[TIMERS_AGGREGATES_SYMBOL] = this[TIMERS_AGGREGATES_SYMBOL] || new Map(); - var current = this[TIMERS_AGGREGATES_SYMBOL].get(label); - - if (current !== undefined) { - if (time[1] + current[1] > 1e9) { - time[0] += current[0] + 1; - time[1] = time[1] - 1e9 + current[1]; - } else { - time[0] += current[0]; - time[1] += current[1]; - } - } - - this[TIMERS_AGGREGATES_SYMBOL].set(label, time); - } - }, { - key: "timeAggregateEnd", - value: function timeAggregateEnd(label) { - if (this[TIMERS_AGGREGATES_SYMBOL] === undefined) return; - var time = this[TIMERS_AGGREGATES_SYMBOL].get(label); - if (time === undefined) return; - this[TIMERS_AGGREGATES_SYMBOL].delete(label); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }]); - - return WebpackLogger; -}(); - -exports.Logger = WebpackLogger; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/createConsoleLogger.js": -/*!*****************************************************************!*\ - !*** ./node_modules/webpack/lib/logging/createConsoleLogger.js ***! - \*****************************************************************/ -/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_10785__) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _iterableToArray(iter) { - if (typeof (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }) !== "undefined" && iter[(typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }).iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) { - arr2[i] = arr[i]; - } - - return arr2; -} - -var _require = __nested_webpack_require_10785__(/*! ./Logger */ "./node_modules/webpack/lib/logging/Logger.js"), - LogType = _require.LogType; -/** @typedef {import("../../declarations/WebpackOptions").FilterItemTypes} FilterItemTypes */ - -/** @typedef {import("../../declarations/WebpackOptions").FilterTypes} FilterTypes */ - -/** @typedef {import("./Logger").LogTypeEnum} LogTypeEnum */ - -/** @typedef {function(string): boolean} FilterFunction */ - -/** - * @typedef {Object} LoggerConsole - * @property {function(): void} clear - * @property {function(): void} trace - * @property {(...args: any[]) => void} info - * @property {(...args: any[]) => void} log - * @property {(...args: any[]) => void} warn - * @property {(...args: any[]) => void} error - * @property {(...args: any[]) => void=} debug - * @property {(...args: any[]) => void=} group - * @property {(...args: any[]) => void=} groupCollapsed - * @property {(...args: any[]) => void=} groupEnd - * @property {(...args: any[]) => void=} status - * @property {(...args: any[]) => void=} profile - * @property {(...args: any[]) => void=} profileEnd - * @property {(...args: any[]) => void=} logTime - */ - -/** - * @typedef {Object} LoggerOptions - * @property {false|true|"none"|"error"|"warn"|"info"|"log"|"verbose"} level loglevel - * @property {FilterTypes|boolean} debug filter for debug logging - * @property {LoggerConsole} console the console to log to - */ - -/** - * @param {FilterItemTypes} item an input item - * @returns {FilterFunction} filter function - */ - - -var filterToFunction = function filterToFunction(item) { - if (typeof item === "string") { - var regExp = new RegExp("[\\\\/]".concat(item.replace( // eslint-disable-next-line no-useless-escape - /[-[\]{}()*+?.\\^$|]/g, "\\$&"), "([\\\\/]|$|!|\\?)")); - return function (ident) { - return regExp.test(ident); - }; - } - - if (item && typeof item === "object" && typeof item.test === "function") { - return function (ident) { - return item.test(ident); - }; - } - - if (typeof item === "function") { - return item; - } - - if (typeof item === "boolean") { - return function () { - return item; - }; - } -}; -/** - * @enum {number} - */ - - -var LogLevel = { - none: 6, - false: 6, - error: 5, - warn: 4, - info: 3, - log: 2, - true: 2, - verbose: 1 -}; -/** - * @param {LoggerOptions} options options object - * @returns {function(string, LogTypeEnum, any[]): void} logging function - */ - -module.exports = function (_ref) { - var _ref$level = _ref.level, - level = _ref$level === void 0 ? "info" : _ref$level, - _ref$debug = _ref.debug, - debug = _ref$debug === void 0 ? false : _ref$debug, - console = _ref.console; - var debugFilters = typeof debug === "boolean" ? [function () { - return debug; - }] : - /** @type {FilterItemTypes[]} */ - [].concat(debug).map(filterToFunction); - /** @type {number} */ - - var loglevel = LogLevel["".concat(level)] || 0; - /** - * @param {string} name name of the logger - * @param {LogTypeEnum} type type of the log entry - * @param {any[]} args arguments of the log entry - * @returns {void} - */ - - var logger = function logger(name, type, args) { - var labeledArgs = function labeledArgs() { - if (Array.isArray(args)) { - if (args.length > 0 && typeof args[0] === "string") { - return ["[".concat(name, "] ").concat(args[0])].concat(_toConsumableArray(args.slice(1))); - } else { - return ["[".concat(name, "]")].concat(_toConsumableArray(args)); - } - } else { - return []; - } - }; - - var debug = debugFilters.some(function (f) { - return f(name); - }); - - switch (type) { - case LogType.debug: - if (!debug) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.debug === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.debug.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.log: - if (!debug && loglevel > LogLevel.log) return; - console.log.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.info: - if (!debug && loglevel > LogLevel.info) return; - console.info.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.warn: - if (!debug && loglevel > LogLevel.warn) return; - console.warn.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.error: - if (!debug && loglevel > LogLevel.error) return; - console.error.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.trace: - if (!debug) return; - console.trace(); - break; - - case LogType.groupCollapsed: - if (!debug && loglevel > LogLevel.log) return; - - if (!debug && loglevel > LogLevel.verbose) { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.groupCollapsed === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.groupCollapsed.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - } - - // falls through - - case LogType.group: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.group === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.group.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.groupEnd: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.groupEnd === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.groupEnd(); - } - - break; - - case LogType.time: - { - if (!debug && loglevel > LogLevel.log) return; - var ms = args[1] * 1000 + args[2] / 1000000; - var msg = "[".concat(name, "] ").concat(args[0], ": ").concat(ms, " ms"); - - if (typeof console.logTime === "function") { - console.logTime(msg); - } else { - console.log(msg); - } - - break; - } - - case LogType.profile: - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.profile === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.profile.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.profileEnd: - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.profileEnd === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.profileEnd.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.clear: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.clear === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.clear(); - } - - break; - - case LogType.status: - if (!debug && loglevel > LogLevel.info) return; - - if (typeof console.status === "function") { - if (args.length === 0) { - console.status(); - } else { - console.status.apply(console, _toConsumableArray(labeledArgs())); - } - } else { - if (args.length !== 0) { - console.info.apply(console, _toConsumableArray(labeledArgs())); - } - } - - break; - - default: - throw new Error("Unexpected LogType ".concat(type)); - } - }; - - return logger; -}; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/runtime.js": -/*!*****************************************************!*\ - !*** ./node_modules/webpack/lib/logging/runtime.js ***! - \*****************************************************/ -/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_20872__) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _extends() { - _extends = Object.assign ? Object.assign.bind() : function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - return _extends.apply(this, arguments); -} - -var SyncBailHook = __nested_webpack_require_20872__(/*! tapable/lib/SyncBailHook */ "./client-src/modules/logger/SyncBailHookFake.js"); - -var _require = __nested_webpack_require_20872__(/*! ./Logger */ "./node_modules/webpack/lib/logging/Logger.js"), - Logger = _require.Logger; - -var createConsoleLogger = __nested_webpack_require_20872__(/*! ./createConsoleLogger */ "./node_modules/webpack/lib/logging/createConsoleLogger.js"); -/** @type {createConsoleLogger.LoggerOptions} */ - - -var currentDefaultLoggerOptions = { - level: "info", - debug: false, - console: console -}; -var currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions); -/** - * @param {string} name name of the logger - * @returns {Logger} a logger - */ - -exports.getLogger = function (name) { - return new Logger(function (type, args) { - if (exports.hooks.log.call(name, type, args) === undefined) { - currentDefaultLogger(name, type, args); - } - }, function (childName) { - return exports.getLogger("".concat(name, "/").concat(childName)); - }); -}; -/** - * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options - * @returns {void} - */ - - -exports.configureDefaultLogger = function (options) { - _extends(currentDefaultLoggerOptions, options); - - currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions); -}; - -exports.hooks = { - log: new SyncBailHook(["origin", "type", "args"]) -}; - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __nested_webpack_require_23009__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __nested_webpack_require_23009__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ !function() { -/******/ // define getter functions for harmony exports -/******/ __nested_webpack_require_23009__.d = function(exports, definition) { -/******/ for(var key in definition) { -/******/ if(__nested_webpack_require_23009__.o(definition, key) && !__nested_webpack_require_23009__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ !function() { -/******/ __nested_webpack_require_23009__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -/******/ }(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ !function() { -/******/ // define __esModule on exports -/******/ __nested_webpack_require_23009__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ }(); -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. -!function() { -/*!********************************************!*\ - !*** ./client-src/modules/logger/index.js ***! - \********************************************/ -__nested_webpack_require_23009__.r(__webpack_exports__); -/* harmony export */ __nested_webpack_require_23009__.d(__webpack_exports__, { -/* harmony export */ "default": function() { return /* reexport default export from named module */ webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__; } -/* harmony export */ }); -/* harmony import */ var webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_23009__(/*! webpack/lib/logging/runtime.js */ "./node_modules/webpack/lib/logging/runtime.js"); - -}(); -var __webpack_export_target__ = exports; -for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i]; -if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true }); -/******/ })() -; - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/overlay.js": -/*!***********************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/overlay.js ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "formatProblem": function() { return /* binding */ formatProblem; }, -/* harmony export */ "hide": function() { return /* binding */ hide; }, -/* harmony export */ "show": function() { return /* binding */ show; } -/* harmony export */ }); -/* harmony import */ var ansi_html_community__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ansi-html-community */ "./node_modules/ansi-html-community/index.js"); -/* harmony import */ var ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(ansi_html_community__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! html-entities */ "./node_modules/html-entities/lib/index.js"); -/* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(html_entities__WEBPACK_IMPORTED_MODULE_1__); -// The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app) -// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware). - - -var colors = { - reset: ["transparent", "transparent"], - black: "181818", - red: "E36049", - green: "B3CB74", - yellow: "FFD080", - blue: "7CAFC2", - magenta: "7FACCA", - cyan: "C3C2EF", - lightgrey: "EBE7E3", - darkgrey: "6D7891" -}; -/** @type {HTMLIFrameElement | null | undefined} */ - -var iframeContainerElement; -/** @type {HTMLDivElement | null | undefined} */ - -var containerElement; -/** @type {Array<(element: HTMLDivElement) => void>} */ - -var onLoadQueue = []; -/** @type {TrustedTypePolicy | undefined} */ - -var overlayTrustedTypesPolicy; -ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default().setColors(colors); -/** - * @param {string | null} trustedTypesPolicyName - */ - -function createContainer(trustedTypesPolicyName) { - // Enable Trusted Types if they are available in the current browser. - if (window.trustedTypes) { - overlayTrustedTypesPolicy = window.trustedTypes.createPolicy(trustedTypesPolicyName || "webpack-dev-server#overlay", { - createHTML: function createHTML(value) { - return value; - } - }); - } - - iframeContainerElement = document.createElement("iframe"); - iframeContainerElement.id = "webpack-dev-server-client-overlay"; - iframeContainerElement.src = "about:blank"; - iframeContainerElement.style.position = "fixed"; - iframeContainerElement.style.left = 0; - iframeContainerElement.style.top = 0; - iframeContainerElement.style.right = 0; - iframeContainerElement.style.bottom = 0; - iframeContainerElement.style.width = "100vw"; - iframeContainerElement.style.height = "100vh"; - iframeContainerElement.style.border = "none"; - iframeContainerElement.style.zIndex = 9999999999; - - iframeContainerElement.onload = function () { - containerElement = - /** @type {Document} */ - - /** @type {HTMLIFrameElement} */ - iframeContainerElement.contentDocument.createElement("div"); - containerElement.id = "webpack-dev-server-client-overlay-div"; - containerElement.style.position = "fixed"; - containerElement.style.boxSizing = "border-box"; - containerElement.style.left = 0; - containerElement.style.top = 0; - containerElement.style.right = 0; - containerElement.style.bottom = 0; - containerElement.style.width = "100vw"; - containerElement.style.height = "100vh"; - containerElement.style.backgroundColor = "rgba(0, 0, 0, 0.85)"; - containerElement.style.color = "#E8E8E8"; - containerElement.style.fontFamily = "Menlo, Consolas, monospace"; - containerElement.style.fontSize = "large"; - containerElement.style.padding = "2rem"; - containerElement.style.lineHeight = "1.2"; - containerElement.style.whiteSpace = "pre-wrap"; - containerElement.style.overflow = "auto"; - var headerElement = document.createElement("span"); - headerElement.innerText = "Compiled with problems:"; - var closeButtonElement = document.createElement("button"); - closeButtonElement.innerText = "X"; - closeButtonElement.style.background = "transparent"; - closeButtonElement.style.border = "none"; - closeButtonElement.style.fontSize = "20px"; - closeButtonElement.style.fontWeight = "bold"; - closeButtonElement.style.color = "white"; - closeButtonElement.style.cursor = "pointer"; - closeButtonElement.style.cssFloat = "right"; // @ts-ignore - - closeButtonElement.style.styleFloat = "right"; - closeButtonElement.addEventListener("click", function () { - hide(); - }); - containerElement.appendChild(headerElement); - containerElement.appendChild(closeButtonElement); - containerElement.appendChild(document.createElement("br")); - containerElement.appendChild(document.createElement("br")); - /** @type {Document} */ - - /** @type {HTMLIFrameElement} */ - iframeContainerElement.contentDocument.body.appendChild(containerElement); - onLoadQueue.forEach(function (onLoad) { - onLoad( - /** @type {HTMLDivElement} */ - containerElement); - }); - onLoadQueue = []; - /** @type {HTMLIFrameElement} */ - - iframeContainerElement.onload = null; - }; - - document.body.appendChild(iframeContainerElement); -} -/** - * @param {(element: HTMLDivElement) => void} callback - * @param {string | null} trustedTypesPolicyName - */ - - -function ensureOverlayExists(callback, trustedTypesPolicyName) { - if (containerElement) { - // Everything is ready, call the callback right away. - callback(containerElement); - return; - } - - onLoadQueue.push(callback); - - if (iframeContainerElement) { - return; - } - - createContainer(trustedTypesPolicyName); -} // Successful compilation. - - -function hide() { - if (!iframeContainerElement) { - return; - } // Clean up and reset internal state. - - - document.body.removeChild(iframeContainerElement); - iframeContainerElement = null; - containerElement = null; -} -/** - * @param {string} type - * @param {string | { file?: string, moduleName?: string, loc?: string, message?: string }} item - * @returns {{ header: string, body: string }} - */ - - -function formatProblem(type, item) { - var header = type === "warning" ? "WARNING" : "ERROR"; - var body = ""; - - if (typeof item === "string") { - body += item; - } else { - var file = item.file || ""; // eslint-disable-next-line no-nested-ternary - - var moduleName = item.moduleName ? item.moduleName.indexOf("!") !== -1 ? "".concat(item.moduleName.replace(/^(\s|\S)*!/, ""), " (").concat(item.moduleName, ")") : "".concat(item.moduleName) : ""; - var loc = item.loc; - header += "".concat(moduleName || file ? " in ".concat(moduleName ? "".concat(moduleName).concat(file ? " (".concat(file, ")") : "") : file).concat(loc ? " ".concat(loc) : "") : ""); - body += item.message || ""; - } - - return { - header: header, - body: body - }; -} // Compilation with errors (e.g. syntax error or missing modules). - -/** - * @param {string} type - * @param {Array} messages - * @param {string | null} trustedTypesPolicyName - */ - - -function show(type, messages, trustedTypesPolicyName) { - ensureOverlayExists(function () { - messages.forEach(function (message) { - var entryElement = document.createElement("div"); - var typeElement = document.createElement("span"); - - var _formatProblem = formatProblem(type, message), - header = _formatProblem.header, - body = _formatProblem.body; - - typeElement.innerText = header; - typeElement.style.color = "#".concat(colors.red); // Make it look similar to our terminal. - - var text = ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default()((0,html_entities__WEBPACK_IMPORTED_MODULE_1__.encode)(body)); - var messageTextNode = document.createElement("div"); - messageTextNode.innerHTML = overlayTrustedTypesPolicy ? overlayTrustedTypesPolicy.createHTML(text) : text; - entryElement.appendChild(typeElement); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(messageTextNode); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(document.createElement("br")); - /** @type {HTMLDivElement} */ - - containerElement.appendChild(entryElement); - }); - }, trustedTypesPolicyName); -} - - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/socket.js": -/*!**********************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/socket.js ***! - \**********************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "client": function() { return /* binding */ client; } -/* harmony export */ }); -/* harmony import */ var _clients_WebSocketClient_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clients/WebSocketClient.js */ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js"); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -/* provided dependency */ var __webpack_dev_server_client__ = __webpack_require__(/*! ./node_modules/webpack-dev-server/client/clients/WebSocketClient.js */ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js"); -/* global __webpack_dev_server_client__ */ - - // this WebsocketClient is here as a default fallback, in case the client is not injected - -/* eslint-disable camelcase */ - -var Client = // eslint-disable-next-line no-nested-ternary -typeof __webpack_dev_server_client__ !== "undefined" ? typeof __webpack_dev_server_client__.default !== "undefined" ? __webpack_dev_server_client__.default : __webpack_dev_server_client__ : _clients_WebSocketClient_js__WEBPACK_IMPORTED_MODULE_0__["default"]; -/* eslint-enable camelcase */ - -var retries = 0; -var maxRetries = 10; // Initialized client is exported so external consumers can utilize the same instance -// It is mutable to enforce singleton -// eslint-disable-next-line import/no-mutable-exports - -var client = null; -/** - * @param {string} url - * @param {{ [handler: string]: (data?: any, params?: any) => any }} handlers - * @param {number} [reconnect] - */ - -var socket = function initSocket(url, handlers, reconnect) { - client = new Client(url); - client.onOpen(function () { - retries = 0; - - if (typeof reconnect !== "undefined") { - maxRetries = reconnect; - } - }); - client.onClose(function () { - if (retries === 0) { - handlers.close(); - } // Try to reconnect. - - - client = null; // After 10 retries stop trying, to prevent logspam. - - if (retries < maxRetries) { - // Exponentially increase timeout to reconnect. - // Respectfully copied from the package `got`. - // eslint-disable-next-line no-restricted-properties - var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100; - retries += 1; - _utils_log_js__WEBPACK_IMPORTED_MODULE_1__.log.info("Trying to reconnect..."); - setTimeout(function () { - socket(url, handlers, reconnect); - }, retryInMs); - } - }); - client.onMessage( - /** - * @param {any} data - */ - function (data) { - var message = JSON.parse(data); - - if (handlers[message.type]) { - handlers[message.type](message.data, message.params); - } - }); -}; - -/* harmony default export */ __webpack_exports__["default"] = (socket); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/createSocketURL.js": -/*!*************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/createSocketURL.js ***! - \*************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/** - * @param {{ protocol?: string, auth?: string, hostname?: string, port?: string, pathname?: string, search?: string, hash?: string, slashes?: boolean }} objURL - * @returns {string} - */ -function format(objURL) { - var protocol = objURL.protocol || ""; - - if (protocol && protocol.substr(-1) !== ":") { - protocol += ":"; - } - - var auth = objURL.auth || ""; - - if (auth) { - auth = encodeURIComponent(auth); - auth = auth.replace(/%3A/i, ":"); - auth += "@"; - } - - var host = ""; - - if (objURL.hostname) { - host = auth + (objURL.hostname.indexOf(":") === -1 ? objURL.hostname : "[".concat(objURL.hostname, "]")); - - if (objURL.port) { - host += ":".concat(objURL.port); - } - } - - var pathname = objURL.pathname || ""; - - if (objURL.slashes) { - host = "//".concat(host || ""); - - if (pathname && pathname.charAt(0) !== "/") { - pathname = "/".concat(pathname); - } - } else if (!host) { - host = ""; - } - - var search = objURL.search || ""; - - if (search && search.charAt(0) !== "?") { - search = "?".concat(search); - } - - var hash = objURL.hash || ""; - - if (hash && hash.charAt(0) !== "#") { - hash = "#".concat(hash); - } - - pathname = pathname.replace(/[?#]/g, - /** - * @param {string} match - * @returns {string} - */ - function (match) { - return encodeURIComponent(match); - }); - search = search.replace("#", "%23"); - return "".concat(protocol).concat(host).concat(pathname).concat(search).concat(hash); -} -/** - * @param {URL & { fromCurrentScript?: boolean }} parsedURL - * @returns {string} - */ - - -function createSocketURL(parsedURL) { - var hostname = parsedURL.hostname; // Node.js module parses it as `::` - // `new URL(urlString, [baseURLString])` parses it as '[::]' - - var isInAddrAny = hostname === "0.0.0.0" || hostname === "::" || hostname === "[::]"; // why do we need this check? - // hostname n/a for file protocol (example, when using electron, ionic) - // see: https://github.com/webpack/webpack-dev-server/pull/384 - - if (isInAddrAny && self.location.hostname && self.location.protocol.indexOf("http") === 0) { - hostname = self.location.hostname; - } - - var socketURLProtocol = parsedURL.protocol || self.location.protocol; // When https is used in the app, secure web sockets are always necessary because the browser doesn't accept non-secure web sockets. - - if (socketURLProtocol === "auto:" || hostname && isInAddrAny && self.location.protocol === "https:") { - socketURLProtocol = self.location.protocol; - } - - socketURLProtocol = socketURLProtocol.replace(/^(?:http|.+-extension|file)/i, "ws"); - var socketURLAuth = ""; // `new URL(urlString, [baseURLstring])` doesn't have `auth` property - // Parse authentication credentials in case we need them - - if (parsedURL.username) { - socketURLAuth = parsedURL.username; // Since HTTP basic authentication does not allow empty username, - // we only include password if the username is not empty. - - if (parsedURL.password) { - // Result: : - socketURLAuth = socketURLAuth.concat(":", parsedURL.password); - } - } // In case the host is a raw IPv6 address, it can be enclosed in - // the brackets as the brackets are needed in the final URL string. - // Need to remove those as url.format blindly adds its own set of brackets - // if the host string contains colons. That would lead to non-working - // double brackets (e.g. [[::]]) host - // - // All of these web socket url params are optionally passed in through resourceQuery, - // so we need to fall back to the default if they are not provided - - - var socketURLHostname = (hostname || self.location.hostname || "localhost").replace(/^\[(.*)\]$/, "$1"); - var socketURLPort = parsedURL.port; - - if (!socketURLPort || socketURLPort === "0") { - socketURLPort = self.location.port; - } // If path is provided it'll be passed in via the resourceQuery as a - // query param so it has to be parsed out of the querystring in order for the - // client to open the socket to the correct location. - - - var socketURLPathname = "/ws"; - - if (parsedURL.pathname && !parsedURL.fromCurrentScript) { - socketURLPathname = parsedURL.pathname; - } - - return format({ - protocol: socketURLProtocol, - auth: socketURLAuth, - hostname: socketURLHostname, - port: socketURLPort, - pathname: socketURLPathname, - slashes: true - }); -} - -/* harmony default export */ __webpack_exports__["default"] = (createSocketURL); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js": -/*!********************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js ***! - \********************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/** - * @returns {string} - */ -function getCurrentScriptSource() { - // `document.currentScript` is the most accurate way to find the current script, - // but is not supported in all browsers. - if (document.currentScript) { - return document.currentScript.getAttribute("src"); - } // Fallback to getting all scripts running in the document. - - - var scriptElements = document.scripts || []; - var scriptElementsWithSrc = Array.prototype.filter.call(scriptElements, function (element) { - return element.getAttribute("src"); - }); - - if (scriptElementsWithSrc.length > 0) { - var currentScript = scriptElementsWithSrc[scriptElementsWithSrc.length - 1]; - return currentScript.getAttribute("src"); - } // Fail as there was no script to use. - - - throw new Error("[webpack-dev-server] Failed to get current script source."); -} - -/* harmony default export */ __webpack_exports__["default"] = (getCurrentScriptSource); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/log.js": -/*!*************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/log.js ***! - \*************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "log": function() { return /* binding */ log; }, -/* harmony export */ "setLogLevel": function() { return /* binding */ setLogLevel; } -/* harmony export */ }); -/* harmony import */ var _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modules/logger/index.js */ "./node_modules/webpack-dev-server/client/modules/logger/index.js"); -/* harmony import */ var _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0__); - -var name = "webpack-dev-server"; // default level is set on the client side, so it does not need -// to be set by the CLI or API - -var defaultLevel = "info"; // options new options, merge with old options - -/** - * @param {false | true | "none" | "error" | "warn" | "info" | "log" | "verbose"} level - * @returns {void} - */ - -function setLogLevel(level) { - _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default().configureDefaultLogger({ - level: level - }); -} - -setLogLevel(defaultLevel); -var log = _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default().getLogger(name); - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/parseURL.js": -/*!******************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/parseURL.js ***! - \******************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _getCurrentScriptSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getCurrentScriptSource.js */ "./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js"); - -/** - * @param {string} resourceQuery - * @returns {{ [key: string]: string | boolean }} - */ - -function parseURL(resourceQuery) { - /** @type {{ [key: string]: string }} */ - var options = {}; - - if (typeof resourceQuery === "string" && resourceQuery !== "") { - var searchParams = resourceQuery.slice(1).split("&"); - - for (var i = 0; i < searchParams.length; i++) { - var pair = searchParams[i].split("="); - options[pair[0]] = decodeURIComponent(pair[1]); - } - } else { - // Else, get the url from the
    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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];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;is||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 8e8045007..88b388063 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
    ' +\n /* eslint-disable */\n '' +\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\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 = 1;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (!this.mouseLeaveSkip) {\n this.renderExportIcon();\n } else {\n this.mouseLeaveSkip = false;\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\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\nconsole.log(opacities);\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.Toolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities';\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 var edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 var map = overlay._map;\n\n var 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 var 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","isNaN","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","_ul","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","m","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
    ' +\n /* eslint-disable */\n '' +\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\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 = 1;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\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' ? '' : '_toggleOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 var map = overlay._map;\n\n var 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 var 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 2fef350a0..d089c7e8c 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -19,7 +19,49 @@ opacities = opacities.map((o) => { }); }); -console.log(opacities); +L.OpacitiesToolbar2 = L.Toolbar2.extend({ + options: { + className: '', + filter: function() { return true; }, + actions: [], + style: `translate(-1px, -${ (opacities.length + 1) * 30 }px)`, + }, + + appendToContainer(container) { + let baseClass = this.constructor.baseClass + '-' + this._calculateDepth(); + let className = baseClass + ' ' + this.options.className; + let Action; let action; + let i; let j; let l; let m; + + this._container = container; + this._ul = L.DomUtil.create('ul', className, container); + this._ul.style.transform = ( this.options.style ) ? this.options.style : ''; + + // Ensure that clicks, drags, etc. don't bubble up to the map. + // These are the map events that the L.Draw.Polyline handler listens for. + // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but + // if only 'mouseup' is silenced, then the map gets stuck in a halfway + // state because it receives a 'mousedown' event and is waiting for the + // corresponding 'mouseup' event. + this._disabledEvents = [ + 'click', 'mousemove', 'dblclick', + 'mousedown', 'mouseup', 'touchstart', + ]; + + for (j = 0, m = this._disabledEvents.length; j < m; j++) { + L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation); + } + + /* Instantiate each toolbar action and add its corresponding toolbar icon. */ + for (i = 0, l = this.options.actions.length; i < l; i++) { + Action = this._getActionConstructor(this.options.actions[i]); + + action = new Action(); + action._createIcon(this, this._ul, this._arguments); + } + }, +}); + L.OpacitiesAction = L.EditAction.extend({ initialize(map, overlay, options) { @@ -34,7 +76,7 @@ L.OpacitiesAction = L.EditAction.extend({ className: mode === 'lock' ? 'disabled' : '', }; - options.subToolbar = new L.Toolbar2({ + options.subToolbar = new L.OpacitiesToolbar2({ actions: opacities, }); From 4650dede3b4a97bafd624d7f54ddfd6468e4f5c4 Mon Sep 17 00:00:00 2001 From: themacboy Date: Mon, 7 Nov 2022 20:51:51 +0100 Subject: [PATCH 64/73] correct some mistakes --- dist/leaflet.distortableimage.css | 4 ++-- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index c40dd77d3..6b9c6383e 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -239,8 +239,8 @@ a.leaflet-toolbar-icon[title='Loading...'] { z-index:900; } -.leaflet-toolbar-1 li:last-child a { - border-radius: 0px 0px 4px 4px !important; +.leaflet-toolbar-1 li:first-child a { + border-radius: 4px 4px 0px 0px !important; } input[type="text"]::-webkit-input-placeholder { diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index a2edd45ba..61f7d3eca 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];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;is||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];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)+13,"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;is||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 88b388063..2d0bb202d 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
    ' +\n /* eslint-disable */\n '' +\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\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 = 1;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\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' ? '' : '_toggleOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 var map = overlay._map;\n\n var 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 var 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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":"kCAAAA,EAAEC,sBAAwBD,EAAEE,aAAaC,OAAO,CAC9CC,QAAS,CACPC,UAAU,EACVC,WAAY,CACVC,eAAgB,iCAChBC,UAAW,0BACXC,UAAW,kCAIfC,WAV8C,SAUnCN,GACTJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEE,aAAaW,UAAUH,WAAWI,KAAKF,KAAMR,GAC/CJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAKP,SAAWO,KAAKR,QAAQC,UAG/BY,MAlB8C,SAkBxCC,GACJlB,EAAEE,aAAaW,UAAUI,MAAMH,KAAKF,KAAMM,GAE1CN,KAAKO,KAAOD,EAERN,KAAKP,UAAYO,KAAKQ,QAAQC,SAMlCT,KAAKU,GAAG,WAAYV,KAAKW,WAAYX,MACrCA,KAAKU,GAAG,cAAeV,KAAKY,cAAeZ,OAG7Ca,SAjC8C,WAkCxCb,KAAKQ,SAAWR,KAAKQ,QAAQM,UAEjCd,KAAKe,IAAI,WAAYf,KAAKW,WAAYX,MACtCA,KAAKe,IAAI,cAAef,KAAKY,cAAeZ,OAG9CW,WAxC8C,SAwCnCK,GACT,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASR,GAAGO,EAAO,CACnBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASR,GAAGO,EAAMM,aAAc,CAChCC,UAAWxB,KAAKyB,gBAEhBC,YAAa1B,KAAK2B,uBACjB3B,OAGLY,cAvD8C,SAuDhCI,GACZ,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASH,IAAIE,EAAO,CACpBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASH,IAAIE,EAAMM,aAAc,CACjCC,UAAWxB,KAAKyB,gBAChBC,YAAa1B,KAAK2B,uBACjB3B,OAGL2B,sBArE8C,SAqExBX,GAAG,WAClBhB,KAAKP,WAEVuB,EAAEY,iBAEF5B,KAAK6B,WAAU,SAACZ,GACd,IAAMa,EAAOb,EAAMT,QACfS,EAAMM,eAAiBP,EAAEe,QAAUD,EAAKE,YAC1C5C,EAAE6C,QAAQC,YAAYjB,EAAMM,aAAc,aACtC,EAAKY,gBACPlB,EAAMmB,WACN,EAAK5B,QAAQ6B,eAEb,EAAK7B,QAAQ8B,uBAMrBC,YAxF8C,SAwFlCC,GACV,OAAOpD,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAGlDY,aA5F8C,WA8F5C,OADiBnC,KAAK0C,YACNC,KAAK3C,KAAKuC,YAAYK,KAAK5C,QAG7C6C,iBAjG8C,SAiG7B7B,EAAGC,GACdD,EAAE8B,UAEA7B,EAAMT,QAAQwB,WAChB5C,EAAE6C,QAAQC,YAAYlB,EAAEe,OAAQ,aAIhC/B,KAAKmC,eAAkBlB,EAAMmB,WAC1BpC,KAAKQ,QAAQ8B,kBAGtBb,gBA7G8C,SA6G9BT,GAAG,WACZhB,KAAKP,WAEVO,KAAK6B,WAAU,SAACZ,GACVA,EAAMM,eAAiBP,EAAEe,OAC3Bd,EAAMmB,WAEN,EAAKS,iBAAiB7B,EAAGC,MAIzBD,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCI,mBA3H8C,SA2H3BJ,GACjB,IAEIgC,EAFER,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAGZP,KAAKuC,YAAYC,IAEtBxC,KAAK6B,WAAU,SAACZ,GAGd,IAFAA,EAAMgC,iBAAmB,GACzBhC,EAAMmB,WACDY,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACtB,IAAME,EAAIjC,EAAMkC,UAAUH,GAC1B/B,EAAMgC,iBAAiBD,GAAK1C,EAAI8C,mBAAmBF,QAKzD5B,cA5I8C,SA4IhCN,GACZ,IAAMwB,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAEjB,GAAKP,KAAKuC,YAAYC,GAAtB,CAEA,IAAMa,EAAU/C,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDG,EAAQd,EAAQS,iBAAiB,GAAGM,SAASF,GAEnDrD,KAAKwD,4BAA4BF,EAAOd,KAG1CiB,UAxJ8C,WAwJlC,WAGV,OAFiBzD,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAQ,EAAKrB,YAAYtB,IAAmB,SAAT0C,MAIvCE,QAjK8C,SAiKtCrB,GAAS,WAGf,OAFiBxC,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAO3C,IAAUuB,GAAW,EAAKD,YAAYtB,IAAmB,SAAT0C,MAI3DH,4BA1K8C,SA0KlBF,EAAOd,GACjC,IAEIQ,EAFEc,EAAe9D,KAAK6D,QAAQrB,GAC5BuB,EAAI,IAAI3E,EAAE4E,eAAe,GAAIV,EAAMW,EAAG,GAAIX,EAAMY,GAGtDJ,EAAaK,SAAQ,SAAClD,GACpB,IAAMmD,EAAc,GACpB,IAAKpB,EAAI,EAAGA,EAAI,EAAGA,IACjBoB,EAAYpB,GAAKe,EAAEM,UAAUpD,EAAMgC,iBAAiBD,IAEtD/B,EAAMqD,qBAAqBF,OAI/BG,kBAxL8C,SAwL5BC,GAIhB,OAHeA,EAAKC,QAAO,SAASC,EAAKC,GACvC,OAAOD,EAAMC,EAAIC,eAChB,GACaJ,EAAKK,QAGvBC,mBA/L8C,WAgM5C,IAAMC,EAAO,CACbA,OAAc,IA4Bd,OA1BA/E,KAAK6B,WAAU,SAASZ,GACtB,GAAIjB,KAAKuC,YAAYtB,GAAQ,CAC3B,IAAM+D,EAAW/D,EAAMgE,OAAOC,IAAIC,MAAM,KAClCC,EAAWJ,EAASA,EAASH,OAAO,GACpCQ,EAAKpE,EAAMqE,aACXC,EAAU,CACd,CAACC,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,MAE9BX,EAAKY,OAAOC,KAAK,CACfC,GAAI7F,KAAK8F,WAAW7E,GACpBiE,IAAKjE,EAAMgE,OAAOC,IAClBa,MAAO9E,EAAMgE,OAAOc,MACpBC,OAAQ/E,EAAMgE,OAAOe,OACrBC,gBAAiBb,EACjBc,MAAOX,EACPX,aAAcxF,EAAE+G,UAAUC,cAAcnF,QAG3CjB,MAEH+E,EAAKY,OAASZ,EAAKY,OAAOU,UAC1BtB,EAAKuB,iBAAmBtG,KAAKuE,kBAAkBQ,EAAKY,QAE7CZ,KAIX3F,EAAEmH,sBAAwB,SAASV,EAAIrG,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBwG,EAAIrG,K,eClOzCJ,EAAEoH,wBAA0BpH,EAAEqH,aAAalH,OAAO,CAEhDC,QAAS,CACPwG,OAAQ,IACRU,aAAa,EAEbC,aAAc,GACdlH,UAAU,EACVkE,KAAM,UACNiD,UAAU,GAGZ9G,WAZgD,SAYrC+G,EAAKrH,GACdJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAK2G,aAAe3G,KAAKR,QAAQmH,aACjC3G,KAAKP,SAAWO,KAAKR,QAAQC,SAC7BO,KAAK8G,UAAY9G,KAAKR,QAAQoH,SAC9B5G,KAAK+G,KAAOF,EACZ7G,KAAKgH,SAAW,IAGlB3G,MAvBgD,SAuB1CC,GAAK,WACTN,KAAKO,KAAOD,EACPN,KAAKuB,cAAgBvB,KAAKiH,aAE/B3G,EAAII,GAAG,YAAaV,KAAKkH,OAAQlH,MAE7BA,KAAKR,QAAQ+F,UACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QACzBjF,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAYV,KAAKuH,aAAcvH,OAK1CZ,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAAQ,WAIvC,GAHA,EAAKiG,UAAUC,YAAY,EAAKlG,cAChC,EAAKmG,uBAED,EAAKlI,QAAQwH,SAAU,CACzB,IAAMW,EAAQ,EAAKnI,QAAQwH,SAASY,KAAO,EAAI,MAAQ,MACvD,EAAKC,SAAS,EAAKrI,QAAQwH,SAASW,GAAQA,QAE5C,EAAKX,SAAW,CAACY,IAAK,EAAGE,IAAK,GAC9B,EAAKZ,SAIF,EAAKC,UACJ7G,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAY,EAAK6G,aAAc,GAK1C,IAAMQ,EAAe,EAAKC,cACtBD,GACF,EAAKE,GAAKF,EAAaG,OAAOC,KAAKJ,GAAc,IAC7C,EAAKE,GAAGxI,UAAY,EAAKe,QAAQC,WAEjC,EAAKhB,UAAY,EAAKe,QAAQC,SAClC,EAAKwH,GAAK,SAId7I,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACvDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MAMGM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAG7CA,KAAK6I,KAAK,QAGZhI,SArFgD,SAqFvCP,GACPlB,EAAE8B,SAASH,IAAIf,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACxDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MACHZ,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAExCA,KAAKQ,SAAWR,KAAKQ,QAAQM,UACjCd,KAAK6I,KAAK,UAEVzJ,EAAEqH,aAAaxG,UAAUY,SAASX,KAAKF,KAAMM,IAG/CoH,qBApGgD,WAqG9C,IAAMpH,EAAMN,KAAKO,KACXuI,EAAqB1J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,SAC3DyH,EAAsB5J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,UAC5D0H,EACFC,SAASJ,GAAsBI,SAASF,GACtCG,EAAcnJ,KAAKR,QAAQwG,OAC3BoD,EAAaF,SAASD,EAAcE,GACpCE,EAAS/I,EAAIgJ,QAAQhJ,EAAIiJ,aACzBC,EAASpK,EAAEqK,MAAML,EAAYD,GAAaO,SAAS,GACrD1J,KAAKR,QAAQ+F,QACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QAE7BvF,KAAKmH,SAAW,CACd7G,EAAIqJ,UAAUN,EAAO9F,SAASiG,IAC9BlJ,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIJ,KAI7BxJ,KAAK6J,mBAAqB,CACxB,OAAUR,EACV,OAAUG,EACV,KAAQlJ,EAAIwJ,WAGd9J,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,gBAGrCoD,aAlIgD,SAkInC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKoC,YAIvCkG,sBAvIgD,WAwI9C,IAAMhI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAC5CZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKoC,SAAUpC,OAGnDwI,qBA7IgD,WA8I9C,IAAMlI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAC3CZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKoC,SAAUpC,OAGpDkK,WAnJgD,WAoJ9C,OAAOlK,KAAK8G,WAGd1E,SAvJgD,WAwJ9C,IAAMN,EAAO9B,KAAKQ,QAClB,GAAKsB,EAAKE,UAOV,OALAF,EAAKQ,iBACLR,EAAKqI,eAELnK,KAAK8G,WAAY,EACjB9G,KAAK6I,KAAK,YACH7I,MAGToI,OAnKgD,SAmKzCpH,GACL,IAAMc,EAAO9B,KAAKQ,QACZyH,EAAKjI,KAAKiI,GAEhB,GAAKnG,EAAKE,UAAV,CAYA,GAXIhB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,GAGpChB,KAAKoK,wBAELpK,KAAK8G,WAAY,EACjBhF,EAAKO,cACLP,EAAKuI,eACLrK,KAAK6I,KAAK,WAGNZ,IAAMA,EAAG9F,eAKb,OAAOnC,KAJLA,KAAKoC,aAOTgI,sBA3LgD,WA4L9CpK,KAAKO,KAAKsB,WAAU,SAACZ,GACfA,aAAiB7B,EAAEoH,yBACrBvF,EAAMmB,eAKZkI,UAnMgD,SAmMtCC,EAAQC,GAChB,IAAM1I,EAAO9B,KAAKQ,QAalB,OAXAR,KAAKmH,SAASoD,GAAUC,EAExBxK,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT8K,sBApNgD,SAoN1BC,EAAMR,EAAQjK,GAClC,OAAIA,EAAId,QAAQwL,IAAIC,QAAU7L,EAAE8L,IAAID,SAKrB,IAATF,GACFI,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI,EACrCkH,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,GAAK,MAEzCiH,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI6G,EAAO,EAC5CK,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,EAAImH,KAAKC,IAAI,EAAGP,IAAS,KAEvDI,GAAcC,GATtB,IAAID,EACAC,GAYRG,WArOgD,SAqOrCC,GACT,IAAMlL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAGR,IAAK,IAAMyI,KAAKD,EACd,GAAIxL,KAAK8K,sBAAsBC,EAAMS,EAAUC,GAAInL,GAIjD,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAM4C,KAAKD,EACdxL,KAAKmH,SAASnE,GAAKwI,EAAUC,GAC7BzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGTsE,qBAtQgD,SAsQ3BoH,GACnB,IAAMpL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAER,IAAK,IAAMyI,KAAKC,EAAW,CACzB,IAAMnB,EAASjK,EAAIqL,mBAAmBD,EAAUD,IAEhD,GAAIzL,KAAK8K,sBAAsBC,EAAMR,EAAQjK,GAI3C,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAM4C,KAAKC,EACd1L,KAAKmH,SAASnE,GAAK1C,EAAIqL,mBAAmBD,EAAUD,IACpDzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT4L,QAxSgD,SAwSxCC,GACN,IAEI7I,EACAe,EAHEzD,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAG1BuC,EAAgB,GAEtB,GAAc,IAAVD,EAAJ,CAEA,IAAK7I,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EACCgJ,QAAQtJ,KAAKmD,UAAUH,IACvBO,SAAS8F,GACT0C,WAAWF,GACXjC,IAAIP,GACTyC,EAAc9I,GAAK1C,EAAIqJ,UAAU5F,GAKnC,OAFA/D,KAAKuL,WAAWO,GAET9L,OAGTgM,SA/TgD,WA+TzB,IAAdC,EAAc,uDAAP,MACRC,EAASlM,KAAKuB,aAAa4K,MAAM/M,EAAE6C,QAAQmK,WAC5CjH,MAAM,YAAY,GAClBkH,MAAM,GAAI,GACVlH,MAAM,KAELmH,EAAQJ,EAAO,GACfK,EAAQL,EAAO,GACfM,EAAQN,EAAO,GACfO,EAAQP,EAAO,GAEfQ,EAAcJ,EAAQG,EAAQF,EAAQC,EAExCG,EAAQvN,EAAEwN,SAASC,UAAUP,EAAOC,EAAO,OAU/C,OARIG,EAAc,IAChBC,GAASA,EAAQ,EAAItB,KAAKyB,IAAMzB,KAAKyB,IAGnCH,EAAQ,IACVA,EAAQ,EAAItB,KAAKyB,GAAKH,GAGR,QAATV,EACHZ,KAAK0B,MAAM3N,EAAEwN,SAASI,iBAAiBL,IACvCvN,EAAE6N,KAAKC,UAAUP,EAAO,IAG9B9E,SA3VgD,SA2VvC8E,GAAqB,IAAdV,EAAc,uDAAP,MACfkB,EAAenN,KAAKgM,SAASC,GAC7BmB,EAAkBT,EAAQQ,EAGhC,OAFAnN,KAAKqN,SAASD,EAAiBnB,GAExBjM,MAGTqN,SAnWgD,SAmWvCV,GAAqB,IAIxB3J,EACAe,EACAuJ,EANUrB,EAAc,uDAAP,MACf3L,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAC1BhE,EAAU,GAShB,IAJa,QAAT0G,IACFU,EAAQvN,EAAEwN,SAASW,iBAAiBZ,IAGjC3J,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAAS8F,GAC5CiE,EAAIlO,EAAEqK,MACF4B,KAAKmC,IAAIb,GAAS5I,EAAEE,EAAIoH,KAAKoC,IAAId,GAAS5I,EAAEG,EAC5CmH,KAAKoC,IAAId,GAAS5I,EAAEE,EAAIoH,KAAKmC,IAAIb,GAAS5I,EAAEG,GAEhDqB,EAAQvC,GAAK1C,EAAIqJ,UAAU2D,EAAE1D,IAAIP,IAKnC,OAFArJ,KAAKuL,WAAWhG,GAETvF,MAGT0N,OA7XgD,SA6XzCC,EAAaC,GAClB,IACI5K,EACAe,EAFEzD,EAAMN,KAAKO,KAGXsN,EAAe,GACfvK,EAAQhD,EAAIgJ,QAAQqE,GAAapK,SAASjD,EAAIgJ,QAAQsE,IAE5D,IAAK5K,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAASD,GAC5CuK,EAAa7K,GAAK1C,EAAIqJ,UAAU5F,GAGlC/D,KAAKuL,WAAWsC,IAGlBC,QA5YgD,WAwZ9C,IAXA,IAAMxN,EAAMN,KAAKO,KACX8I,EAASrJ,KAAK6J,mBAAmBR,OACjCG,EAASxJ,KAAK6J,mBAAmBL,OACjCuB,EAAO/K,KAAK6J,mBAAmBkB,KAC/BxF,EAAU,CACd8D,EAAO9F,SAASiG,GAChBH,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,IACrCmF,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,IACrCmF,EAAOO,IAAIJ,IAGJxG,EAAI,EAAGA,EAAI,EAAGA,IAChB1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,GAAMgD,OAAO/N,KAAKmD,UAAUH,KACzDhD,KAAKsK,UAAUtH,EAAG1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,IAOhD,OAHA/K,KAAK6K,QAAS,EACd7K,KAAK6I,KAAK,WAEH7I,MAKTgO,oBAtagD,SAsa5BvE,GAOlB,IAAMwE,EAAO7O,EAAEiI,QAAQ6G,SAEjBC,GAASF,EAAO,KAAO,IAAM,IAEnC,MAHa,aAAeA,EAAO,KAAO,IAAM,IAGlCxE,EAAMxF,EAAI,MAAQwF,EAAMvF,EAAI,KAAOiK,GAGnDjH,OApbgD,WAqb9C,IAAM5G,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACb6B,EAAqBhE,EAAEwD,KAAKtC,EAAI8C,mBAAoB9C,GACpD+N,EAAkBrO,KACnBsO,8BAA8BlL,GAC7BC,EAAUD,EAAmBpD,KAAKmD,UAAU,IAC5CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,KAK5DP,EAAMjC,MAAM/M,EAAE6C,QAAQmK,UAAY,WAAa,QAE/CpM,KAAKgH,SAASY,IAAM5H,KAAKgM,WACzBhM,KAAKgH,SAASc,IAAM9H,KAAKgM,SAAS,QASpCzE,aAldgD,SAkdnCqH,GACX,IAAMtO,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACbsN,EAAwB,SAASrE,GACrC,OAAOlK,EAAIwO,uBAAuBtE,EAAQoE,EAAM7D,KAAM6D,EAAMvF,SAExDgF,EAAkBrO,KAAKsO,8BACzBO,GAEExL,EAAUwL,EAAsB7O,KAAKmD,UAAU,IAC/CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,MAG9DrJ,WAregD,WAse9C,OAAOtF,KAAKmH,UAGdhE,UAzegD,SAyetCH,GACR,OAAOhD,KAAKmH,SAASnE,IAIvBuG,UA9egD,WA+e9C,IAAMjJ,EAAMN,KAAKO,KACXkE,EAASzE,KAAKsF,aAAab,QAAO,SAASsK,EAAKxE,GACpD,OAAOwE,EAAInF,IAAItJ,EAAIgJ,QAAQiB,MAC1BnL,EAAEqK,MAAM,EAAG,IACd,OAAOnJ,EAAIqJ,UAAUlF,EAAOiF,SAAS,KAGvC4E,8BAtfgD,SAsflBU,GAI5B,IAIIC,EAJEzF,EAASwF,EAAkBhP,KAAKmD,UAAU,IAC1C+L,EAAIlP,KAAKuB,aAAa4N,aAAe,IACrCC,EAAIpP,KAAKuB,aAAa8N,cAAgB,IACtCnM,EAAI,GAGV,IAAK+L,EAAI,EAAGA,EAAI,EAAGA,IACjB/L,EAAE0C,KAAKoJ,EAAkBhP,KAAKmD,UAAU8L,IAAIK,UAAU9F,IAcxD,OAAOpK,EAAEmQ,WAAWC,oBAChB,EAAG,EAAGtM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAG,EAAGhM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnB,EAAGkL,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAGE,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,MAK3B9E,EAAEqQ,wBAA0B,SAAS5J,EAAIrG,GACvC,OAAO,IAAIJ,EAAEoH,wBAAwBX,EAAIrG,IAG3CJ,EAAEsQ,IAAIC,aAAY,WACXvQ,EAAE6C,QAAQQ,SAASzC,KAAK4P,eAAgB,QAC3CxQ,EAAE6C,QAAQ4N,SAAS7P,KAAK4P,eAAgB,W,0BC9hB5CxQ,EAAE6C,QAAU7C,EAAE6C,SAAW,GACzB7C,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBqF,UAAY3Q,EAAE4Q,QAAQzQ,OAAO,CAE9CC,QAAS,CACPyQ,SAAU,YAGZnQ,WAN8C,SAMnCQ,EAAKd,GACdQ,KAAKO,KAAOD,EACZlB,EAAEW,WAAWC,KAAMR,IAGrB0Q,SAX8C,WAYvClQ,KAAKmQ,aACRnQ,KAAKoQ,WAAapQ,KAAKqQ,kBACvBrQ,KAAKsQ,eAAiBtQ,KAAKuQ,QAC3BvQ,KAAKwQ,SAAWxQ,KAAKyQ,gBACrBzQ,KAAK0Q,WAAW1Q,KAAKoQ,WAAYpQ,KAAKsQ,eAAgBtQ,KAAKwQ,UAE3DpR,EAAE8B,SAASR,GAAGV,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE7DZ,EAAE8B,SAAS0P,wBAAwB5Q,KAAKoQ,YACxChR,EAAE8B,SAAS2P,yBAAyB7Q,KAAKoQ,cAI7CU,YAzB8C,WA0BxC9Q,KAAKmQ,aACP/Q,EAAE8B,SAASH,IAAIf,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE9DZ,EAAE6C,QAAQ8O,OAAO/Q,KAAKwQ,UACtBpR,EAAE6C,QAAQ8O,OAAO/Q,KAAKsQ,gBACtBlR,EAAE6C,QAAQ8O,OAAO/Q,KAAKoQ,YACtBpQ,KAAKmQ,YAAa,IAItBE,gBApC8C,WAqC5C,IAAMW,EAAY5R,EAAE6C,QAAQgP,OAAO,MAAO,sBAC1CD,EAAUE,aAAa,KAAM,iBAE7B,IAAMC,EAAU/R,EAAE6C,QAAQgP,OAAO,KAAM,WAGvC,OAFAD,EAAUvJ,YAAY0J,GAEfH,GAGTP,cA9C8C,WA+C5C,IAAMW,EAAUhS,EAAE6C,QAAQgP,OAAO,IAAK,IAUtC,OATAG,EAAQC,UAAYjS,EAAEkS,SAASL,OAAO,iBAEtCG,EAAQF,aAAa,KAAM,oBAC3BE,EAAQF,aAAa,OAAQ,KAC7BE,EAAQF,aAAa,QAAS,eAE9BE,EAAQF,aAAa,OAAQ,UAC7BE,EAAQF,aAAa,aAAc,eAE5BE,GAGTb,MA5D8C,WA6D5C,IAAMgB,EAAOnS,EAAE6C,QAAQgP,OAAO,MAAO,IAIrC,OAHAM,EAAKL,aAAa,KAAM,qBACxBK,EAAKpF,MAAMqF,QAAU,OAEdD,GAGTb,WApE8C,SAoEnCM,EAAWO,EAAME,GAC1BzR,KAAKmQ,WAAa/Q,EAAEsS,QAAQ,CAACzB,SAAUjQ,KAAKR,QAAQyQ,WAEpDjQ,KAAKmQ,WAAW9P,MAAQ,WAuBtB,OAtBA2Q,EAAUvJ,YAAY8J,GACtBA,EAAKI,mBACD,YACA,k3CAkBJX,EAAUvJ,YAAYgK,GACfT,GAGThR,KAAKmQ,WAAWyB,MAAM5R,KAAKO,OAG7BoQ,iBApG8C,SAoG7B3P,GACfA,EAAEY,iBAEF5B,KAAKoQ,WAAWyB,UACgB,kCAA9B7R,KAAKoQ,WAAWyB,UACd,qCACA,gCAGJ7R,KAAKsQ,eAAenE,MAAMqF,QACc,SAAtCxR,KAAKsQ,eAAenE,MAAMqF,QAAqB,QAAU,OAG3DxR,KAAKwQ,SAASa,UACgB,UAA5BrR,KAAKwQ,SAASa,UACZjS,EAAEkS,SAASL,OAAO,iBAClB,QAGJ7R,EAAEkS,SAASQ,YAAY9R,KAAKwQ,SAAU,cAAe,eACrDpR,EAAE6C,QAAQC,YAAYlC,KAAKwQ,SAAU,eAGvCuB,eA3H8C,WA4H5C,IAAIC,SAASC,cAAc,sBAA3B,CAEA,IAAMC,EAAK9S,EAAE6C,QAAQgP,OAAO,MAAO,IACnCiB,EAAGrM,GAAK,oBACRqM,EAAGhB,aAAa,SAAU,UAE1BlR,KAAKmS,UAAW,IAAI/S,EAAEgT,kBAAmBC,SACzCH,EAAGb,UAAYrR,KAAKmS,SAEpBH,SAASC,cAAc,8BAA8BxK,YAAYyK,OAIrE9S,EAAEsL,iBAAiBqF,UAAUJ,aAAY,WACvCvQ,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACrClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACvClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GAAK,EAC5C,EAGgD,IAA9ClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,IAAalT,EAAEiI,QAAQkL,SAChE,EAAK9R,SACL,EAAKsR,qBAIT3S,EAAE0Q,iBAAiB0C,UAAY,SAAClS,EAAKd,GACnC,OAAO,IAAIJ,EAAEsL,iBAAiBqF,UAAUzP,EAAKd,K,eC3J/CJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEC,sBAAsBoT,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CAC9CC,QAAS,CACPkT,OAAQtT,EAAE0Q,iBAAiB6C,kBAG7B7S,WAL8C,SAKnC8S,EAAOpT,GAChBQ,KAAK6S,OAASD,EACd5S,KAAK8S,YAAcF,EAAMpT,QAAQE,WAEjCN,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB6C,iBAAiBI,OAAS,iBAG/C7C,SAd8C,WAe5C,IACM5P,EADQN,KAAK6S,OACDtS,KAElBP,KAAKgT,YAAchT,KAAKR,QAAQyT,QAChCjT,KAAKkT,YACD9T,EAAEwD,KAAKxD,EAAEe,MAAMgT,aAAanT,KAAM,cAAe,aACjDA,KAAKoT,YAAapT,MAEtBZ,EAAE8B,SAASR,GAAGsR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE9CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAGlDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQC,aAG/CqQ,YAxC8C,WAyC5C,IACMxQ,EADQN,KAAK6S,OACDtS,KAElBnB,EAAE8B,SAASH,IAAIiR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE/CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MAGnDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAKsT,gBACLtT,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQM,cAG/CL,OA9D8C,WAiE5C,OAFAT,KAAKyT,UAAW,EAChBzT,KAAKkQ,WACElQ,MAGTc,QApE8C,WAuE5C,OAFAd,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAGTqT,WA1E8C,SA0EnCrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KAExB3T,KAAK0T,IAEN1T,KAAK6S,OAAO1Q,gBACdnC,KAAK0T,GAAaxT,KAAKF,OAI3B0I,aArF8C,SAqFjC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKsT,cAActS,IAIrDsH,sBA1F8C,WA2F5C,IAAMhI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MACjDZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKsT,cAAetT,OAGxDwI,qBAhG8C,WAiG5C,IAAMlI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAChDZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKsT,cAAetT,OAGzDsT,cAtG8C,SAsGhCtS,GACZ,IAAI4S,EAEA5S,IAAK4S,EAAK5S,EAAE6S,eAKZD,IAAOA,EAAG9Q,UAAY8Q,EAAG7R,kBAAkB+R,oBAI/C9T,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB7B,EAAE6C,QAAQ8R,YAAY9S,EAAMM,aAAc,aAC1CN,EAAMmB,cAGRpC,KAAKsC,iBAEDtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCgT,aA5H8C,WA4H/B,WACRhU,KAAKiU,QAAQ7U,EAAE8U,eAEpBlU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd2T,UAELlT,EAAMmB,gBAKZgS,WAzI8C,WAyIjC,WACNpU,KAAKiU,QAAQ7U,EAAEiV,aAEpBrU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd8T,QAELlV,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CiS,gBAtJ8C,SAsJ9BxS,GAAG,WACXuT,EAAMvT,EAAEwT,iBACRlU,EAAMN,KAAK6S,OAAOtS,KAExBP,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB,IAAMa,EAAOb,EAAMT,QAEfS,EAAMiJ,cAAgBjJ,EAAMmB,WAEhC,IAAM2I,EAAOzK,EAAIwJ,UACXT,EAAS/I,EAAIiJ,YACfkL,EAAYrV,EAAE4K,aAAa/I,EAAMkC,UAAU,GAAIlC,EAAMkC,UAAU,IAEnEsR,EAAYnU,EAAIoU,8BAA8BD,EAAW1J,EAAM1B,GAC3DkL,EAAII,WAAWF,IAAc3S,EAAKE,YAC/B,EAAKyI,SAAW,EAAKpI,cAC1BjD,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CqT,aA3K8C,SA2KjC5T,GAAG,WACd,GAAKhB,KAAKiU,QAAQ7U,EAAEyV,cAApB,CAEA,IAAMC,EAAiB9U,KAAK6S,OAAOpP,YAC7BsR,EAAID,EAAejQ,OAEf,IAANkQ,IAEW3V,EAAE6C,QAAQ+S,eAAeD,KAGtCD,EAAe3Q,SAAQ,SAAClD,GACtB,EAAK4R,OAAOoC,YAAYhU,MAErBjB,KAAK6S,OAAO1Q,gBACfnC,KAAKsC,kBAILtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,MAGtCkU,aAjM8C,WAkMvClV,KAAKmV,mBACRnV,KAAK8S,YAAYsC,gBAAaC,GAGhCC,cAActV,KAAKuV,iBAGrBlT,YAzM8C,WA0M5C,IAAMuQ,EAAQ5S,KAAK6S,OACbvS,EAAMsS,EAAMrS,KAEdqS,EAAMpT,QAAQgW,iBAAmBxV,KAAKyK,UAE1CzK,KAAKyK,QAAUrL,EAAE0Q,iBAAiB2F,WAAW,CAC3CxC,QAASjT,KAAKgT,YACd/C,SAAU,YACT2B,MAAMtR,EAAKsS,KAGhBtQ,eArN8C,WAsN5C,IAAMhC,EAAMN,KAAK6S,OAAOtS,KACxB,IAAIP,KAAKyK,QAIP,OAAO,EAHPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,GAMnBwJ,QA/N8C,SA+NtCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDE,QAnO8C,SAmOtCF,GAMN,MALwB,yBAApBA,EAAMG,WAAyC7V,KAAKiU,QAAQyB,KAC9D1V,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,eAEArC,MAGT8V,WA5O8C,SA4OnCJ,GAAO,WAWhB,OAVA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,OAAI,EAAKhD,YAAYgD,KAASN,IAC5B,EAAKpT,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,eACE,MAKJrC,MAGToT,YA1P8C,WA0PhC,WACZ,GAAKpT,KAAKiU,QAAQ7U,EAAE8W,cAEpB,OAAO,IAAIC,SAAQ,SAACC,GAClB,IAGIxW,EAHEyW,EAAO,EAAKvD,YAClBuD,EAAKD,QAAUA,EAGf,EAAKb,eAAiB,KAmEtB,EAAKJ,mBAAqBkB,EAAKjB,WAC1B,EAAKD,mBACRkB,EAAKjB,WAAa,EAAKvC,OAAO/N,qBAAqBa,QAGrD0Q,EAAKC,UAAYD,EAAKC,WAAa,IACnCD,EAAKxK,MAAQwK,EAAKxK,OAAS,IAC3BwK,EAAKE,QAAUF,EAAKE,SAvEI,SAACC,IACvBA,EAAOC,KAAKC,MAAMF,IAETG,aACH/W,IAAc4W,EAAKG,YAAcH,EAAKG,WAAWC,MAAM,WAIzDhX,EAAY4W,EAAKG,YAIC,aAAhBH,EAAKK,SACPvB,cAAc,EAAKC,gBAEd,EAAKJ,mBACR,EAAKrC,YAAYsC,gBAAaC,GAGhCe,IACiB,OAAbI,EAAKM,KACPC,MAAM,qBAAuBV,EAAKxW,UAAY2W,EAAKM,MAMvDE,QAAQC,IAAIT,KA6ChBH,EAAKa,gBAAkBb,EAAKa,iBAvCI,SAACV,GAC/B5W,EAAYyW,EAAKzW,UAAY4W,EAE7B,EAAKjB,eAAiB4B,aAAY,WAChC,IACMC,EAAM,IAAIC,QAAJ,UAAezX,EAAf,YAA4B0X,KAAKC,OAD7B,CAACC,OAAQ,QAEzBC,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKrB,EAAKE,WACZF,EAAKC,YA6BVD,EAAKyB,eAAiBzB,EAAKyB,gBAzBI,SAACC,GAC9B,IAAMC,EAAO,IAAIC,SACjBD,EAAKE,OAAO,aAAczB,KAAK0B,UAAUJ,EAAW3C,aACpD4C,EAAKE,OAAO,QAASH,EAAWlM,OAChCmM,EAAKE,OAAO,UAAU,GAEtB,IAAME,EAAU,CAACZ,OAAQ,OAAQa,KAAML,GACjCZ,EAAM,IAAIC,QAAQU,EAAWpY,eAAgByY,GACnDX,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKK,EAAWb,kBAerBb,EAAKyB,eAAezB,SAK1BjX,EAAEmH,sBAAsBzE,KAAO,SAAC8Q,EAAOpT,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBoT,KAAKG,EAAOpT,K,eCzVjDJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEsL,iBAAiB+H,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CACzCC,QAAS,CACP8Y,QAAS,GACTC,QAAS,gBACT7F,OAAQtT,EAAE0Q,iBAAiB0I,YAG7B1Y,WAPyC,SAO9B0C,EAAShD,GAClBQ,KAAKyY,SAAWjW,EAChBxC,KAAK0Y,eAAgB,EACrB1Y,KAAK4D,MAAQpB,EAAQhD,QAAQmE,KAC7B3D,KAAK2Y,cAAe,EACpB3Y,KAAK4Y,WAAY,EACjB5Y,KAAK6Y,SAAW,EAEhBzZ,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB0I,WAAWzF,OAAS,aAIzC7C,SArByC,WAsBvC,IAAM1N,EAAUxC,KAAKyY,SAErBzY,KAAKgT,YAAchT,KAAKR,QAAQyT,QAGhCzQ,EAAQsW,eACR9Y,KAAK+Y,aACL/Y,KAAKgZ,eACLhZ,KAAKiZ,4BAEDzW,EAAQ0H,eAAiB1H,EAAQhD,QAAQgW,iBAC3CxV,KAAKqC,cAGPrC,KAAKkZ,cAAc1W,EAAQyF,IAAKzF,EAAQyF,GAExC7I,EAAE8B,SAASR,GAAG8B,EAAQjB,aAAc,CAClC4X,SAAUnZ,KAAKoZ,UACdpZ,MAEHZ,EAAE8B,SAASR,GAAG2Y,OAAQ,UAAWrZ,KAAKqT,WAAYrT,OAIpD8Q,YA9CyC,WA+CvC,IAAMtO,EAAUxC,KAAKyY,SACfxQ,EAAKjI,KAAKkZ,YAOhB,IAAK,IAAMI,KAJXtZ,KAAKuZ,mBAEDvZ,KAAKyK,SAAWzK,KAAKsC,iBAEJtC,KAAKwZ,SACxBpa,EAAE6C,QAAQ8O,OAAOuI,GAOfla,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAC3CnC,EAAE6C,QAAQ8R,YAAYvR,EAAQjB,aAAc,aAG1C0G,IAAQA,EAAG9F,gBAAkB8F,EAAGzH,QAAQiK,SAC1CxC,EAAGzH,QAAQ8B,iBAGblD,EAAE8B,SAASH,IAAIyB,EAAQjB,aAAc,CACnC4X,SAAUnZ,KAAKoZ,UACdpZ,MAEHZ,EAAE8B,SAASH,IAAIsY,OAAQ,UAAWrZ,KAAKqT,WAAYrT,OAGrDc,QA9EyC,WA+EvC,OAAKd,KAAKyT,UAEVzT,KAAKyY,SAASrW,WACdpC,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MALsBA,MAQ/B+Y,WAvFyC,WA2FvC,IAAK,IAAMpV,KAHX3D,KAAKyZ,OAAS,GAGKra,EAAEsL,iBAAiB+H,KAAKiH,MAAO,CAChD,IAAM/D,EAASvW,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,IACH,IAAtC3D,KAAKgT,YAAY2G,QAAQhE,KAC3B3V,KAAKyZ,OAAO9V,GAAQgS,GAMnB3V,KAAKyZ,OAAOzZ,KAAK4D,SACpB5D,KAAK4D,MAAQsE,OAAOC,KAAKnI,KAAKyZ,QAAQ,KAK1CT,aA1GyC,WA2GvC,IACIhW,EADER,EAAUxC,KAAKyY,SAIrB,IADAzY,KAAK4Z,aAAexa,EAAEya,aACjB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAK4Z,aAAaE,SAAS1a,EAAE2a,WAAWvX,EAASQ,IAInD,IADAhD,KAAKga,cAAgB5a,EAAEya,aAClB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKga,cAAcF,SAAS1a,EAAE6a,YAAYzX,EAASQ,IAIrD,IADAhD,KAAKka,gBAAkB9a,EAAEya,aACpB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKka,gBAAgBJ,SAAS1a,EAAE+a,cAAc3X,EAASQ,IAIzD,IADAhD,KAAKoa,eAAiBhb,EAAEya,aACnB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKoa,eAAeN,SAAS1a,EAAEib,aAAa7X,EAASQ,IAKvD,IADAhD,KAAKsa,mBAAqBlb,EAAEya,aACvB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKsa,mBAAmBR,SAAS1a,EAAEmb,iBAAiB/X,EAASQ,IAI/D,IADAhD,KAAKwa,aAAepb,EAAEya,aACjB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKwa,aAAaV,SAAS1a,EAAEqb,WAAWjY,EAASQ,EAAG,CAAC0X,WAAW,KAGlE1a,KAAKwZ,SAAW,CACdnY,KAAMrB,KAAK4Z,aACX/N,MAAO7L,KAAKga,cACZW,QAAS3a,KAAKka,gBACdU,OAAQ5a,KAAKoa,eACbS,WAAY7a,KAAKsa,mBACjBQ,KAAM9a,KAAKwa,eAIfvB,0BAvJyC,WAwJvC,IAAM8B,EAAK/a,KAAKyY,SAGXzY,KAAK4D,OAKV5D,KAAKgb,iBAEAD,EAAG7Q,cAAgBlK,KAAKib,eAC3Bjb,KAAKib,cAAcpZ,WAAU,SAACyX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASra,aAGtCd,KAAKob,OAAO,SAAWpb,KAAKqb,mBAZ/Brb,KAAKqb,mBAeThI,WA3KyC,SA2K9BrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KACvBoH,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,YAEZjR,GAAMA,EAAG9F,qBAEakT,IAAtBrV,KAAK0T,IAA+BqH,EAAGvb,QAAQgW,iBAC7CuF,EAAG7Q,cAAgBlK,KAAKyK,SAC1BzK,KAAK0T,GAAaxT,KAAKF,OAK7Bsb,YA1LyC,SA0L7BC,EAAKC,GAAM,WACrB,MAAuB,yBAAnBA,EAAK3F,WAAwC7V,KAAKiU,QAAQuH,IAG9Dxb,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASwF,EAAK,CAIhB,IAAK,IAAM5X,KAHX,EAAKrB,iBACL,EAAK0Q,YAAYgD,GAAOwF,EACxB,EAAKnZ,cACcjD,EAAEsL,iBAAiB+H,KAAKiH,MACrCta,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,KAAU4X,UACnC,EAAK9B,OAAO9V,GACnB,EAAK8X,YAAY9X,IACRvE,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,KAAU6X,IACjD,EAAK/B,OAAO9V,GAAQ6X,GAGxB,OAAO,MAfFxb,MAqBX4V,QAjNyC,SAiNjCF,GACN,GAAwB,yBAApBA,EAAMG,YAAyC7V,KAAKiU,QAAQyB,GAAQ,CAItE,IAAK,IAAM/R,KAHX3D,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,cACcjD,EAAEsL,iBAAiB+H,KAAKiH,MACrCta,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,KAAU+R,IAC1C1V,KAAKyZ,OAAO9V,GAAQ+R,GAGnB1V,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBAE1C,OAAOtC,MAGTiU,QAhOyC,SAgOjCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDI,WApOyC,SAoO9BJ,GAAO,WAgBhB,OAfA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASL,EAAO,CAIlB,IAAK,IAAM/R,KAHX,EAAKrB,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,cACcjD,EAAEsL,iBAAiB+H,KAAKiH,MACrCta,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,KAAU+R,WACnC,EAAK+D,OAAO9V,GACnB,EAAK8X,YAAY9X,IAGrB,OAAO,MAGN3D,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBACjCtC,MAITyb,YAxPyC,SAwP7B9X,GACN3D,KAAKob,OAAOzX,KACVuE,OAAOC,KAAKnI,KAAK0b,YAAY7W,QAAU,EACzC7E,KAAKoZ,YAEQ,SAATzV,GAAmB3D,KAAKqb,kBAC5Brb,KAAK4D,MAAQ,GACb5D,KAAKgb,mBAKX1Y,eApQyC,WAqQvC,IACMhC,EADKN,KAAKyY,SACDlY,KAEXP,KAAKyK,UACPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,IAInB4Q,gBA9QyC,WA8QvB,WACV7Y,EAAUxC,KAAKyY,SACfnY,EAAMkC,EAAQjC,KAEpBP,KAAKmb,SAAW,IAAI/b,EAAEuc,UAAUnZ,EAAQjB,cACxCvB,KAAKmb,SAAS1a,SAGdT,KAAKmb,SAASza,GAAG,aAAa,WAC5B8B,EAAQqG,KAAK,aACb,EAAKvG,oBAOPtC,KAAKmb,SAASS,gBAAkB,WAC9B,IAEIC,EAEA7Y,EAJEK,EAAUb,EAAQW,UAAU,GAC5BG,EAAQtD,KAAK8b,QAAQvY,SAASjD,EAAI8C,mBAAmBC,IAErDkC,EAAU,GAKhB,IAFAvF,KAAK6I,KAAK,WAEL7F,EAAI,EAAGA,EAAI,EAAGA,IACjB6Y,EAAevb,EAAI8C,mBAAmBZ,EAAQW,UAAUH,IACxDuC,EAAQvC,GAAK1C,EAAIqL,mBAAmBkQ,EAAajS,IAAItG,IAGvDd,EAAQ+I,WAAWhG,GACnB/C,EAAQqG,KAAK,QAEb7I,KAAK6I,KAAK,SAGZ7I,KAAKmb,SAASza,GAAG,WAAW,WAC1B8B,EAAQqG,KAAK,eAIjB0Q,iBAxTyC,WAyTnCvZ,KAAKmb,WACPnb,KAAKmb,SAASra,iBACPd,KAAKmb,WAIhBY,UA/TyC,WAgUvC/b,KAAKgc,QAAQ,SAGfC,WAnUyC,WAoUvCjc,KAAKgc,QAAQ,UAGfE,aAvUyC,WAwUvClc,KAAKgc,QAAQ,YAGfG,YA3UyC,WA4UvCnc,KAAKgc,QAAQ,WAGfI,gBA/UyC,WAgVvCpc,KAAKgc,QAAQ,eAGfK,gBAnVyC,WAoVnCrc,KAAKob,OAAO,QAAWpb,KAAKmU,UACzBnU,KAAKsU,SAGdgI,eAxVyC,WAyVvC,IACIhE,EADElK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEmd,iBAEpBvc,KAAK2Y,cAAgB3Y,KAAK2Y,aAC1BL,EAAUtY,KAAK2Y,aAAe3Y,KAAKR,QAAQ8Y,QAAU,EAErDlZ,EAAE6C,QAAQiZ,WAAW9M,EAAOkK,GAC5BlK,EAAM8C,aAAa,UAAWoH,GAE9BtY,KAAKwc,aAGPC,cAvWyC,SAuW3BC,GACZ,IAAMtO,EAAQpO,KAAKyY,SAASlX,aACxB+W,EAAUoE,EAET1c,KAAKiU,QAAQ7U,EAAEud,mBAEnB3c,KAAKsY,QAAU,EAAKtY,KAAK2Y,cAAe,EAAO3Y,KAAK2Y,cAAe,EAEpEvZ,EAAE6C,QAAQiZ,WAAW9M,EAAOkK,GAC5BlK,EAAM8C,aAAa,UAAWoH,GAE9BtY,KAAKwc,aAGPI,cArXyC,WAsXvC,IACIrE,EADEnK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEyd,gBAEpB7c,KAAK4Y,WAAa5Y,KAAK4Y,UACvBL,EAAUvY,KAAK4Y,UAAY5Y,KAAKR,QAAQ+Y,QAAU,OAElDnK,EAAMjC,MAAMoM,QAAUA,EAEtBvY,KAAKwc,aAIPM,aApYyC,WAqYnC9c,KAAK0Y,cAAiB1Y,KAAK+c,WACxB/c,KAAKgd,cAGdC,eAzYyC,WA0YvC,IAAMlC,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,aAEZlZ,KAAKob,OAAO,SAAYpb,KAAKiU,QAAQ7U,EAAEyV,eAE5BzV,EAAE6C,QAAQib,kBAGzBld,KAAKsC,iBAED2F,EAAMA,EAAGgN,YAAY8F,GAClBA,EAAGxa,KAAK0U,YAAY8F,KAI7BoC,WAzZyC,WA0ZvC,IAAM3a,EAAUxC,KAAKyY,SACfnY,EAAMkC,EAAQjC,KACdoE,EAAMnC,EAAQjB,aAEpB,GAAKvB,KAAKiU,QAAQ7U,EAAE8W,cAApB,CAGA,IAAMkH,EAAe,IAAIC,MAEzBD,EAAavX,GAAKuX,EAAavX,IAAM,cACrCmM,SAASqG,KAAK5Q,YAAY2V,GAE1BA,EAAaE,OAAS,WACpB,IAAMtX,EAASoX,EAAapX,OACtBD,EAAQqX,EAAarX,MACrBwX,EAAKjd,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cqa,EAAKld,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Csa,EAAKnd,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cua,EAAKpd,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAsBpDia,EAAaE,OAAS,WACpBle,EAAE6C,QAAQ8O,OAAOqM,IAGf/D,QAAUA,OAAOsE,eAAe,cAClCC,UACIR,EAAavX,GACb,CAAC,EAAG,EAAGE,EAAO,EAAGA,EAAOC,EAAQ,EAAGA,GACnC,CAACuX,EAAGtZ,EAAGsZ,EAAGrZ,EAAGsZ,EAAGvZ,EAAGuZ,EAAGtZ,EAAGwZ,EAAGzZ,EAAGyZ,EAAGxZ,EAAGuZ,EAAGxZ,EAAGwZ,EAAGvZ,IAC9C,IAKRkZ,EAAalY,IAAM1C,EAAQhD,QAAQqe,mBAAqBlZ,EAAIO,MAG9D6X,SAndyC,WAod7B/c,KAAK0Y,eAEJ1Y,KAAKiU,QAAQ7U,EAAE0e,eAE1B9d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASK,eACd9Y,KAAKwc,aAGPQ,WA7dyC,YA8d7Bhd,KAAK0Y,eAEL1Y,KAAKiU,QAAQ7U,EAAE0e,eAEzB9d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASsF,cACd/d,KAAKwc,aAGPrI,QAveyC,WAwevC,IAAM4G,EAAK/a,KAAKyY,SACVnY,EAAMya,EAAGxa,KACT0H,EAAKjI,KAAKkZ,YAEXlZ,KAAKob,OAAO,YACZnT,GAAOA,EAAG1F,YAAYwY,KAAS9S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKib,eAAiB3a,EAAI2U,YAAYjV,KAAKib,eACvB,SAApBF,EAAGvb,QAAQmE,MAAoB3D,KAAKge,QAAQjD,EAAGvb,QAAQmE,MAIzD3D,KAAK4D,MAAQmX,EAAGvb,QAAQmE,MAHxB3D,KAAK4D,MAAQ,GACb5D,KAAKib,cAAgB,IAIvBjb,KAAKgb,gBACLhb,KAAKqb,kBACLrb,KAAKwc,aAGPlI,MA7fyC,WA8fvC,IAAMyG,EAAK/a,KAAKyY,SACVnY,EAAMya,EAAGxa,KACT0H,EAAKjI,KAAKkZ,YAEZlZ,KAAKob,OAAO,YACXnT,GAAOA,EAAG1F,YAAYwY,KAAS9S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKib,eAAiB3a,EAAI2U,YAAYjV,KAAKib,eAC/Cjb,KAAK4D,MAAQ,OACb5D,KAAKgb,gBACLhb,KAAKuZ,mBACLvZ,KAAKwc,aAGPyB,UA9gByC,WA+gBvCje,KAAKyY,SAASrW,YAGhBiI,aAlhByC,SAkhB5BrJ,GACX,IAAMiH,EAAKjI,KAAKkZ,YAEXlZ,KAAKib,iBAELjb,KAAKob,OAAO,SAAYnT,GAAMA,EAAG9F,gBAEtCnC,KAAKib,cAAcpZ,WAAU,SAACyX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAAS1a,SACvCrB,EAAE6C,QAAQ4N,SAASyJ,EAAO/X,aAAc,4BAI5C4I,aAhiByC,WAiiBvC,IAAM4Q,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,YAGXlZ,KAAKwZ,UAAYxZ,KAAKgZ,eAEtBhZ,KAAKib,gBACNjb,KAAKob,OAAO,SAAYnT,GAAMA,EAAG1F,YAAYwY,IAEjD/a,KAAKib,cAAcpZ,WAAU,SAACyX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASra,UACvC1B,EAAE6C,QAAQ8R,YAAYuF,EAAO/X,aAAc,4BAI/CyZ,cAjjByC,WAkjBvC,IACM1a,EADKN,KAAKyY,SACDlY,KACToD,EAAO3D,KAAKke,UAEdle,KAAKib,eAAiB3a,EAAI2U,YAAYjV,KAAKib,eAC/Cjb,KAAKib,cAAyB,KAATtX,EAAc,GAAK3D,KAAKwZ,SAAS7V,GAC3B,KAAvB3D,KAAKib,eACP3a,EAAIwZ,SAAS9Z,KAAKib,gBAItB5Y,YA7jByC,WA8jBvC,IAAM0Y,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,YACV5Y,EAAMya,EAAGxa,KAETgF,EAAUwV,EAAGzV,aACf6Y,GAAS,IAEb,GAAIlW,GAAMA,EAAG9F,eACX8F,EAAGzH,QAAQ6B,mBAIb,IAAI0Y,EAAGvb,QAAQgW,kBAAmBxV,KAAKyK,QAAvC,CAEA,IAAK,IAAIzH,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAM2Y,IACnBA,EAAS5Y,EAAQvC,GAAGwC,KAKxB,IAAM4Y,EAAcrD,EAAGxR,YACvB6U,EAAY5Y,IAAM2Y,EAElBne,KAAKyK,QAAUrL,EAAE0Q,iBAAiBuO,SAASD,EAAa,CACtDnL,QAASjT,KAAKgT,cACbpB,MAAMtR,EAAKya,GACdA,EAAGlS,KAAK,qBAGV2T,SA5lByC,WA6lBnCxc,KAAKyK,SAAWzK,KAAKsC,iBACzBtC,KAAKqC,eAGPuI,kBAjmByC,WAkmBvC,IAAMpI,EAAUxC,KAAKyY,SAEflT,EAAU/C,EAAQ8C,aAClBmF,EAAUzK,KAAKyK,QACjB0T,GAAS,IAEb,GAAI1T,GAAWA,aAAmBrL,EAAEsL,iBAAiBC,SAAU,CAC7D,IAAK,IAAI3H,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAM2Y,IACnBA,EAAS5Y,EAAQvC,GAAGwC,KAKxB,IAAM4Y,EAAc5b,EAAQ+G,YAC5B6U,EAAY5Y,IAAM2Y,EAEb3b,EAAQhD,QAAQgW,iBACnBxV,KAAKyK,QAAQ6T,UAAUF,KAK7BJ,QAznByC,SAynBjCra,GACN,QAAS3D,KAAKyZ,OAAO9V,IAGvBua,QA7nByC,WA8nBvC,GAAKle,KAAKgC,UACV,OAAOhC,KAAK4D,OAGd8X,SAloByC,WAmoBvC,OAAO1b,KAAKyZ,QAGd2B,OAtoByC,SAsoBlCzX,GACL,QAAK3D,KAAKgC,WACHhC,KAAK4D,QAAUD,GAGxBqY,QA3oByC,SA2oBjCuC,GACN,IAAMxD,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,YAGhB,GAFalZ,KAAKke,YAELK,GAAYve,KAAKge,QAAQO,IAAave,KAAKgC,UAaxD,OATIhC,KAAKyK,SAAWzK,KAAKyK,QAAQ+T,UAAUD,GACvCve,KAAKob,OAAO,UAAYpb,KAAKmb,UAAYnb,KAAKqb,kBAClDrb,KAAK4D,MAAQ2a,EACTve,KAAKob,OAAO,SAAWpb,KAAKuZ,mBAChCvZ,KAAKgb,gBACLhb,KAAKwc,WAEDvU,GAAMA,EAAG1F,YAAYwY,IAAOA,EAAG3Y,WAE5BpC,MAOToZ,SApqByC,SAoqBhCpY,GACP,IAAM2C,EAAO3D,KAAKke,UACZjW,EAAKjI,KAAKkZ,YACVuF,EAAavW,OAAOC,KAAKnI,KAAK0b,YAC9B1F,EAAMyI,EAAW9E,QAAQhW,GAEzB4a,EAAUE,GADCzI,EAAM,GAAKyI,EAAW5Z,QAGvC,GAAI7D,EAAG,CACL,GAAIiH,GAAMA,EAAG9F,eAAkB,OAC/B/C,EAAE8B,SAASwd,KAAK1d,GAGlB,OAAOhB,KAAKgc,QAAQuC,MAIxBnf,EAAE0Q,iBAAiBhO,KAAO,SAACU,EAAShD,GAClC,OAAO,IAAIJ,EAAEsL,iBAAiB+H,KAAKjQ,EAAShD,K,eCzrB9CJ,EAAEyd,aAAezd,EAAEuf,WAAWpf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIof,EACAC,EAHE/c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK8W,WACPgG,EAAM,eACNC,EAAUrc,EAAQhD,QAAQiP,YAAYqQ,eAEtCF,EAAM,eACNC,EAAUrc,EAAQhD,QAAQiP,YAAYsQ,YAGxCvf,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACThN,UAAoB,SAATlO,EAAkB,WAAa,IAI5CvE,EAAEsL,iBAAiB8N,WAAW2G,EAAa,SAATxb,EAAkB,GAAK,gBAEzDvE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BmC,WA8BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,eAAgB,gBACnDjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,gBAAiB,cACpDvd,EAAK8a,oB,eClCTxd,EAAEyV,aAAezV,EAAEuf,WAAWpf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIqf,EAFE/c,EAAOU,EAAQhC,QAOjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCoM,EAAUrc,EAAQhD,QAAQiP,YAAY6Q,YAEtClgB,EAAEsL,iBAAiB8N,WAAW+G,UACb,SAAfzd,EAAK8B,MAAmB,GAAK,mBAG/Bib,EAAUrc,EAAQhD,QAAQiP,YAAY+Q,aACtCpgB,EAAEsL,iBAAiBiI,iBAAiB4M,UACnB,SAAfzd,EAAK8B,MAAmB,GAAK,iBAIjCpE,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAtBU,iBAuBVL,QAASA,EACThN,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAjCmC,WAkCjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAKmb,iBAC7Cnb,EAAK8S,mB,eCrChBxV,EAAEqgB,cAAgBrgB,EAAEuf,WAAWpf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASrc,EAAQhD,QAAQiP,YAAYiR,aACrC7N,UAAW,WAGbzS,EAAEsL,iBAAiB8N,WAAWmH,EAAI,eAClCvgB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdoC,WAerBlQ,KAAKyY,SAASjY,QACtB0b,mB,eChBT9c,EAAEwgB,WAAaxgB,EAAEuf,WAAWpf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,OACNL,QAASrc,EAAQhD,QAAQiP,YAAYoR,UACrChO,UAAW,QAGbzS,EAAEsL,iBAAiB8N,WAAWsH,EAAI,YAClC1gB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdiC,WAelBlQ,KAAKyY,SAASjY,QACtBub,gB,eChBT3c,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEuf,WAAavf,EAAE2gB,SAASC,OAAOzgB,OAAO,CACtCC,QAAS,CACPwf,YAAa,CACXC,KAAK,EACLC,KAAM,GACNrN,UAAW,GACXgN,QAAS,KAIb/e,WAVsC,SAU3BQ,EAAKkC,EAAShD,GACvBQ,KAAKyY,SAAWjW,EAChBxC,KAAKO,KAAOD,EAEZlB,EAAEW,WAAWC,KAAMR,GACnBJ,EAAE2gB,SAASC,OAAO/f,UAAUH,WAAWI,KAAKF,KAAMR,GAElDQ,KAAK+R,kBAGPkO,YApBsC,SAoB1BxV,EAASuG,EAAWkP,GAAM,WAC9BC,EAAcngB,KAAKR,QAAQwf,YAC3BnN,EAAYsO,EAAYtO,UACxB/P,EAAO9B,KAAKyY,SAASjY,QACrB2L,EAAQnM,KAAKR,QAAQwf,YAAY7S,MAEvCnM,KAAKyK,QAAUA,EACfzK,KAAKogB,MAAQhhB,EAAE6C,QAAQgP,OAAO,KAAM,GAAID,GACxChR,KAAKqf,MAAQjgB,EAAE6C,QAAQgP,OAAO,IAAK,GAAIjR,KAAKogB,OAExCD,EAAYlB,IACdjf,KAAKqf,MAAMhO,UAAYjS,EAAEkS,SAASL,OAAOkP,EAAYjB,MAErDlf,KAAKqf,MAAMhO,UAAY8O,EAAYjB,KAGrClf,KAAKqf,MAAMnO,aAAa,OAAQ,KAChClR,KAAKqf,MAAMnO,aAAa,QAASiP,EAAYtB,SACzC1S,GAASnM,KAAKqf,MAAMnO,aAAa,QAAS/E,GAC9CnM,KAAKqf,MAAMnO,aAAa,OAAQ,UAEhC9R,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAOrf,KAAKqgB,YAAYxK,WAE5ChE,IACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAOxN,GACb,aAAdA,GACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKogB,MAAOvO,GAE7BA,IAAc/P,EAAK8B,MACrBxE,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAO,iBAE/BjgB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAO,kBAItCjgB,EAAE8B,SAASR,GAAGV,KAAKqf,MAAO,QAASrf,KAAKS,OAAQT,MAChDZ,EAAE8B,SAASR,GAAGV,KAAKyY,SAAU,UAAU,WACrC,IAAM7B,EAAQ,EAAKyI,MAAMhO,UAAUuF,MAAM,yBACrCA,GAA0B,IAAjBA,EAAM/R,QAAgB,EAAKyb,mBAI1CtgB,KAAKugB,eAAe9V,EAASzK,KAAKogB,MAAOF,IAG3CnO,eAjEsC,WAkEpC,IAAIC,SAASC,cAAc,YAA3B,CAIA,IAAMC,EAAKF,SAASwO,cAAc,OAClCtO,EAAGrM,GAAK,UACRqM,EAAGhB,aAAa,SAAU,UAC1BgB,EAAGb,WAAY,IAAIjS,EAAEqhB,gBAAiBpO,SAEtCL,SAASC,cAAc,wBAAwBxK,YAAYyK,KAG7DoO,cA9EsC,WA+EpClhB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAMqB,cAAe,YAChDthB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAO,aAGpCsB,eAnFsC,WAoFpCvhB,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAMqB,cAAe,YAC7CthB,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAO,eAInCjgB,EAAEwhB,WAAa,SAAStgB,EAAKkC,EAAShD,GACpC,OAAO,IAAIJ,EAAEuf,WAAWre,EAAKkC,EAAShD,K,eC/FxCJ,EAAE8W,aAAe9W,EAAEuf,WAAWpf,OAAO,CAEnCO,WAFmC,SAExBQ,EAAKkC,EAAShD,GACvB,IACIqf,EADE/c,EAAOU,EAAQhC,QAGrBR,KAAK6gB,aAAc,EACnB7gB,KAAK8gB,gBAAiB,EACtB9gB,KAAK+gB,iBAAkB,EAEnBjf,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAWxX,EAAI,aAClC6d,EAAUrc,EAAQhD,QAAQiP,YAAYuS,cAEtC5hB,EAAEsL,iBAAiBiI,iBAAiB3R,EAAI,cACxC6d,EAAUrc,EAAQhD,QAAQiP,YAAYwS,eAGxCzhB,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASA,GAGXzf,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BmC,WA6BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3B,GAAIsB,aAAgB1C,EAAEsL,iBAAiB+H,KACrC3Q,EAAKqb,kBAKP,IAAInd,KAAK+gB,gBAAT,CAGE/gB,KAAK+gB,iBAAkB,EAGzB,IAAMG,EAAalhB,KAAKqf,MAAMqB,cAE9B1gB,KAAKmhB,kBAAoBnhB,KAAKohB,iBAAiBxe,KAAK5C,MACpDA,KAAKqhB,kBAAoBrhB,KAAKshB,iBAAiB1e,KAAK5C,MAEpDZ,EAAE8B,SAASR,GAAGwgB,EAAY,SAAS,WACjC,GAAKlhB,KAAK6gB,YAWH,CAEL,GAAI7gB,KAAK8gB,eACP,OAGF9gB,KAAKuhB,aACLvhB,KAAKwhB,0BAA0BN,GAC/Bpf,EAAKoT,oBAlBLlV,KAAK6gB,aAAc,EACnB7gB,KAAKyhB,mBAELC,WAAW1hB,KAAK2hB,0BAA0B/e,KAAK5C,KAAMkhB,GAAa,KAClEpf,EAAKoR,cAAcwE,KACf,WACE1X,KAAKuhB,aACLvhB,KAAKwhB,0BAA0BN,IAC/Bte,KAAK5C,SAYZA,QAGLuhB,WAzEmC,WA0EjCvhB,KAAK4hB,qBACL5hB,KAAK6gB,aAAc,EACnB7gB,KAAK8gB,gBAAiB,GAGxBa,0BA/EmC,SA+ETE,GACxBA,EAAQC,iBAAiB,aAAc9hB,KAAKmhB,mBAC5CU,EAAQC,iBAAiB,aAAc9hB,KAAKqhB,oBAG9CG,0BApFmC,SAoFTK,GACxBA,EAAQE,oBAAoB,aAAc/hB,KAAKmhB,mBAC/CU,EAAQE,oBAAoB,aAAc/hB,KAAKqhB,oBAGjDD,iBAzFmC,WA0FjCphB,KAAKgiB,oBAGPV,iBA7FmC,WA8F7BthB,KAAK8gB,eACP9gB,KAAK8gB,gBAAiB,EAEtB9gB,KAAKyhB,oBAITG,mBArGmC,WAsGjCxiB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,UAAW,WAC9CjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,gBAAiB,cACpDjgB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAM4C,WAAY,WAG/CR,iBA3GmC,WA4GjCriB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,WACnCjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,gBAAiB,cACpDjgB,EAAEkS,SAAS4Q,cAAcliB,KAAKqf,MAAO,WAGvC2C,iBAjHmC,WAkHjC5iB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,UACnCjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,gBAAiB,cACpDjgB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAM4C,WAAY,c,cCpHjD7iB,EAAE+iB,iBAAmB/iB,EAAEuf,WAAWpf,OAAO,CACvCO,WADuC,SAC5BQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,cACNL,QAASrc,EAAQhD,QAAQiP,YAAY2T,gBACrCvQ,UAAW,cAGbzS,EAAEsL,iBAAiB8N,WAAW6J,EAAI,kBAClCjjB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAduC,WAexBlQ,KAAKyY,SAASjY,QACtB4b,sB,eChBThd,EAAEkjB,gBAAkBljB,EAAEuf,WAAWpf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IAAMsC,EAAOU,EAAQhC,SAErBhB,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASrc,EAAQhD,QAAQiP,YAAY8T,eACrC1Q,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAfsC,WAgBpC,IAAM9B,EAAQpO,KAAKyY,SAASlX,aAE5BihB,KAAKC,QAAQrU,EAAOhP,EAAEojB,KAAKpU,Q,eClB/BhP,EAAEiV,WAAajV,EAAEuf,WAAWpf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,GACvB,IACIof,EACAC,EAFE/c,EAAOU,EAAQhC,QAIjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAWkK,EAAI,UAClCtjB,EAAEsL,iBAAiB8N,WAAWmK,EAAI,QAClC9D,EAAUrc,EAAQhD,QAAQiP,YAAYmU,SAEtChE,EAAM9c,EAAKsZ,OAAO,QAAU,OAAS,WAErChc,EAAEsL,iBAAiBiI,iBAAiBgQ,EAAI,aACxC9D,EAAUrc,EAAQhD,QAAQiP,YAAYoU,WACtCjE,EAAM,SAGRpf,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACThN,UAAW,QAGbzS,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BiC,WA8B/B,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAKua,kBAC7Cva,EAAKsS,iB,eCjChB,IAAI0O,EAAY,CAAC,IAAK,GAAI,GAAI,GAAI,GAAI,GAEtCA,EAAYA,EAAUxiB,KAAI,SAACoc,GAIzB,OAHCqG,MAAMrG,IAAMA,EAAI,OAAOA,EAAI,KAC3BA,EAAI,IAAKA,EAAI,GAEPtd,EAAEuf,WAAWpf,OAAO,CACzBC,QAAS,CACPwf,YAAa,CACXE,KAAMxC,EACNmC,QAAS,WAAanC,EAAG,IACzB7K,UAAW,gCACX1F,MAAO,yBAA2B,IAAMuQ,GAAK,MAAQ,IAAMA,GAAK,MAAQ,IAAMA,GAAK,QAGvFxM,SATyB,WAUvBlQ,KAAKyY,SAASjY,QAAQic,cAAcC,EAAE,WAK5Ctd,EAAE4jB,kBAAoB5jB,EAAE2gB,SAASxgB,OAAO,CACtCC,QAAS,CACPqS,UAAW,GACXnO,OAAQ,WAAa,OAAO,GAC5BuP,QAAS,GACT9G,MAAO,oBAAF,OAAiD,IAAxB2W,EAAUje,OAAS,GAAW,GAAvD,QAGPoe,kBARsC,SAQpBjS,GAChB,IAGIhO,EAAOiM,EAAO0T,EAAOO,EAFrBrR,EADY7R,KAAKqgB,YAAYxK,UAAY,IAAM7V,KAAKmjB,kBAC5B,IAAMnjB,KAAKR,QAAQqS,UAmB/C,IAfA7R,KAAKoQ,WAAaY,EAClBhR,KAAKojB,IAAMhkB,EAAE6C,QAAQgP,OAAO,KAAMY,EAAWb,GAC7ChR,KAAKojB,IAAIjX,MAAM9H,UAAcrE,KAAKR,QAAQ2M,MAAUnM,KAAKR,QAAQ2M,MAAQ,GAQzEnM,KAAKqjB,gBAAkB,CACrB,QAAS,YAAa,WACtB,YAAa,UAAW,cAGrBpU,EAAI,EAAGiU,EAAIljB,KAAKqjB,gBAAgBxe,OAAQoK,EAAIiU,EAAGjU,IAClD7P,EAAE8B,SAASR,GAAGV,KAAKojB,IAAKpjB,KAAKqjB,gBAAgBpU,GAAI7P,EAAE8B,SAAS6B,iBAI9D,IAAKC,EAAI,EAAG2f,EAAI3iB,KAAKR,QAAQyT,QAAQpO,OAAQ7B,EAAI2f,EAAG3f,KAGzC,IAFAhD,KAAKsjB,sBAAsBtjB,KAAKR,QAAQyT,QAAQjQ,MAGlDid,YAAYjgB,KAAMA,KAAKojB,IAAKpjB,KAAKujB,eAM9CnkB,EAAEud,gBAAkBvd,EAAEuf,WAAWpf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IACMmE,EADOnB,EAAQhC,QACHoD,OAElBpE,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,YACNL,QAAS,qBACThN,UAAoB,SAATlO,EAAkB,WAAa,IAG5CnE,EAAQgkB,WAAa,IAAIpkB,EAAE4jB,kBAAkB,CAC3C/P,QAAS6P,IAGX1jB,EAAEsL,iBAAiB8N,WAAWkE,EAAa,SAAT/Y,EAAkB,GAAK,mBAEzDvE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAtBsC,WAsB3B,WACHuT,EAAOzjB,KAAKqf,MACdjgB,EAAE6C,QAAQQ,SAASghB,EAAM,uBAC3BrkB,EAAE6C,QAAQ8R,YAAY0P,EAAM,sBAC5B/B,YAAW,WACT,EAAKliB,QAAQgkB,WAAWE,UACvB,MAEHtkB,EAAE6C,QAAQ4N,SAAS4T,EAAM,sBAG3BrkB,EAAEkS,SAAS8N,YAAYqE,EAAM,YAAa,UAC1CrkB,EAAEkS,SAASQ,YAAY2R,EAAM,yBAA0B,c,eCnG3DrkB,EAAEmd,cAAgBnd,EAAEuf,WAAWpf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAEIof,EACAC,EAHE/c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK6W,cACPiG,EAAM,gBACNC,EAAUrc,EAAQhD,QAAQiP,YAAYkV,kBAEtC/E,EAAM,UACNC,EAAUrc,EAAQhD,QAAQiP,YAAYmV,uBAGxCpkB,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACThN,UAAoB,SAATlO,EAAkB,WAAa,IAG5CvE,EAAEsL,iBAAiB8N,WAAWkE,EAAa,SAAT/Y,EAAkB,GAAK,iBAEzDvE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BoC,WA6BlC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QACrBijB,EAAOzjB,KAAKqf,MAElBjgB,EAAEkS,SAAS8N,YAAYqE,EAAM,UAAW,iBACxCrkB,EAAEkS,SAASQ,YAAY2R,EAAM,yBAA0B,qBACvD3hB,EAAKwa,qB,eClCTld,EAAEykB,cAAgBzkB,EAAEuf,WAAWpf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAAMmE,EAAOvE,EAAEe,MAAMgT,aAAa3Q,EAAS,UAAW,SAChDqI,EAASrI,EAAQqI,QAEvBrL,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASrc,EAAQhD,QAAQiP,YAAYqV,aACrCjS,UAAWhH,GAAmB,SAATlH,EAAkB,GAAK,YAG9CvE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAhBoC,WAiBlC,IAAM6K,EAAK/a,KAAKyY,SAEhBrZ,EAAE8B,SAASR,GAAGqa,EAAI,CAChBjZ,KAAM9B,KAAKsgB,cACXxS,QAAS9N,KAAK2gB,gBACb3gB,MAEH+a,EAAGjN,c,eCxBP1O,EAAE2kB,aAAe3kB,EAAEuf,WAAWpf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASrc,EAAQhD,QAAQiP,YAAYuV,YACrCnS,UAAW,UAGbzS,EAAEsL,iBAAiB8N,WAAWyL,EAAI,cAClC7kB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdmC,WAepBlQ,KAAKyY,SAASjY,QACtB2b,kB,eChBT/c,EAAE8kB,YAAc9kB,EAAEuf,WAAWpf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,QACNL,QAASrc,EAAQhD,QAAQiP,YAAY0V,WACrCtS,UAAW,SAGbzS,EAAEsL,iBAAiB8N,WAAW4L,EAAI,aAClChlB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdkC,WAenBlQ,KAAKyY,SAASjY,QACtByb,iB,eChBT7c,EAAE0e,YAAc1e,EAAEuf,WAAWpf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,GACvB,IACIof,EACAC,EAFE/c,EAAOU,EAAQhC,QAIjBsB,EAAK4W,eACPkG,EAAM,eACNC,EAAUrc,EAAQhD,QAAQiP,YAAY4V,eAEtCzF,EAAM,gBACNC,EAAUrc,EAAQhD,QAAQiP,YAAY6V,cAGxC9kB,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACThN,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEsL,iBAAiB8N,WAAWlL,EAAmB,SAAfxL,EAAK8B,MAAmB,GAAK,WAC/DxE,EAAEsL,iBAAiB8N,WAAW+L,EAAmB,SAAfziB,EAAK8B,MAAmB,GAAK,aAE/DxE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BkC,WA6BhC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,gBAAiB,gBACpDjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,iBAAkB,iBACrDvd,EAAKgb,mB,eCjCT1d,EAAE8U,aAAe9U,EAAEuf,WAAWpf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASrc,EAAQhD,QAAQiP,YAAY+V,cAGvCplB,EAAEsL,iBAAiBiI,iBAAiB+P,EAAI,eACxCtjB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAbmC,WAcpBlQ,KAAKyY,SAASjY,QACtBwT,mB,eCdT5U,EAAEojB,KAAO,SAAqB7d,GAC5B,GAAiD,IAA7CuD,OAAOC,KAAKqa,KAAKiC,WAAW9f,IAAME,OAAc,CAClDmS,QAAQC,IAAIuL,KAAKiC,WAAW9f,IAC5B,IAAM+f,EAAMlC,KAAKiC,WAAW9f,QAKC,IAApB+f,EAAIC,kBACiB,IAArBD,EAAIE,eAKTF,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAEhBD,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GAEfF,EAAIG,eAGJH,EAAII,iBAUqB,MAA3BJ,EAAIK,oBAK8B,MAA3BL,EAAIK,oBAHV1Z,KAAKyB,GACL4X,EAAIM,gBAAgBC,UAAYP,EAAIM,gBAAgBE,aAOvDlO,QAAQC,IAAI,yBAGdD,QAAQC,IAAI,eAAgByN,EAAIS,cAGR,IAApBT,EAAIS,aAGuB,IAApBT,EAAIS,aAGgB,IAApBT,EAAIS,cAJH9Z,KAAKyB,QAWY,IAApB4X,EAAIU,kBACmB,IAAvBV,EAAIW,qBAKkB,IAApBX,EAAIU,kBACmB,IAAvBV,EAAIW,iBAGTX,EAAIU,YAAYH,UAAYP,EAAIU,YAAYF,YAC5CR,EAAIW,qBAMVtO,MAAM,4D,cClFV3X,EAAEkmB,cAAgBlmB,EAAEmmB,WAAWhmB,OAAO,CACpCC,QAAS,CACPgmB,KAAM,UACNC,KAAMrmB,EAAEqmB,KAAK,CACXC,QAEE,iVACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZoC,WAalB7lB,KAAK8lB,SAEbxb,UAAUtK,KAAK+lB,QAAS/lB,KAAKgmB,cAGvCC,aAlBoC,WAmBlCjmB,KAAKse,UAAUte,KAAK8lB,SAAS3iB,UAAUnD,KAAK+lB,aAIhD3mB,EAAE+a,cAAgB,SAAS3X,EAASwT,EAAKxW,GACvC,OAAO,IAAIJ,EAAEkmB,cAAc9iB,EAASwT,EAAKxW,K,eCxB3CJ,EAAE8mB,WAAa9mB,EAAEmmB,WAAWhmB,OAAO,CACjCC,QAAS,CACPgmB,KAAM,OACNC,KAAMrmB,EAAEqmB,KAAK,CAEXC,QAAS,ykCACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAXiC,WAY/B,IAAMrjB,EAAUxC,KAAK8lB,SACfK,EAAe3jB,EAAQW,UAAUnD,KAAK+lB,SACtCK,EAAYpmB,KAAKgmB,YAEvBxjB,EAAQkL,OAAOyY,EAAcC,IAG/BH,aAnBiC,WAoB/BjmB,KAAKse,UAAUte,KAAK8lB,SAAS3iB,UAAUnD,KAAK+lB,aAIhD3mB,EAAE2a,WAAa,SAASvX,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAE8mB,WAAW1jB,EAASwT,EAAKxW,K,eCzBxCJ,EAAEmmB,WAAanmB,EAAEinB,OAAO9mB,OAAO,CAC7BO,WAD6B,SAClB0C,EAAS+H,EAAQ/K,GAC1B,IAAMgL,EAAShI,EAAQW,UAAUoH,GAEjCnL,EAAEW,WAAWC,KAAMR,GAEnBQ,KAAK8lB,SAAWtjB,EAChBxC,KAAK+lB,QAAUxb,EAEf,IAAM+b,EAAgB,CACpB5L,WAAW,EACX6L,aAAc,IAGZ/mB,GAAWA,EAAQme,eAAe,eACpC2I,EAAc5L,UAAYlb,EAAQkb,WAGpCtb,EAAEinB,OAAOpmB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQ8b,IAGnDjmB,MArB6B,SAqBvBC,GACJlB,EAAEinB,OAAOpmB,UAAUI,MAAMH,KAAKF,KAAMM,GACpCN,KAAKwmB,iBACLxmB,KAAKimB,gBAGPplB,SA3B6B,SA2BpBP,GACPN,KAAKymB,mBACLrnB,EAAEinB,OAAOpmB,UAAUY,SAASX,KAAKF,KAAMM,IAGzComB,mBAhC6B,WAiC3B1mB,KAAK8lB,SAASjd,KAAK,cAGrB8d,iBApC6B,WAqC3B3mB,KAAK4mB,aAGPA,UAxC6B,WAyC3B5mB,KAAK8lB,SAASjb,QAAS,EACvB7K,KAAK8lB,SAASjd,KAAK,SAGrB2d,eA7C6B,WA8C3BxmB,KAAKU,GAAG,CACNgB,YAAatC,EAAE8B,SAASwd,KACxBvd,UAAWnB,KAAK0mB,mBAChBrlB,KAAMrB,KAAK6lB,cACXgB,QAAS7mB,KAAK2mB,kBACb3mB,MAEHA,KAAK8lB,SAASvlB,KAAKG,GAAG,UAAWV,KAAKimB,aAAcjmB,MACpDA,KAAK8lB,SAASplB,GAAG,SAAUV,KAAKimB,aAAcjmB,OAGhDymB,iBAzD6B,WA0D3BzmB,KAAKe,IAAI,CACPW,YAAatC,EAAE8B,SAASwd,KACxBvd,UAAWnB,KAAK0mB,mBAChBrlB,KAAMrB,KAAK6lB,cACXgB,QAAS7mB,KAAK2mB,kBACb3mB,MAEHA,KAAK8lB,SAASvlB,KAAKQ,IAAI,UAAWf,KAAKimB,aAAcjmB,MACrDA,KAAK8lB,SAAS/kB,IAAI,SAAUf,KAAKimB,aAAcjmB,OAIjD8mB,wBAtE6B,SAsELC,EAASC,GAC/B,IAAMxkB,EAAUxC,KAAK8lB,SACfxlB,EAAMkC,EAAQjC,KAEd0mB,EAAc3mB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmB2jB,GACrCnZ,EAAWtN,EAAI8C,mBAAmB4jB,GAClCE,EAAsBlnB,KAAKmnB,IAAIF,EAAatZ,GAC5CyZ,EAAmBpnB,KAAKmnB,IAAIF,EAAarZ,GAE/C,OAAOvC,KAAKgc,KAAKD,EAAmBF,IAItCC,IApF6B,SAoFzB5C,EAAGpF,GACL,IAAMmI,EAAK/C,EAAEtgB,EAAIkb,EAAElb,EACbsjB,EAAKhD,EAAErgB,EAAIib,EAAEjb,EAEnB,OAAOmH,KAAKC,IAAIgc,EAAI,GAAKjc,KAAKC,IAAIic,EAAI,IAIxCC,oBA5F6B,SA4FTT,EAASC,GAC3B,IAAMxkB,EAAUxC,KAAK8lB,SACfxlB,EAAMkC,EAAQjC,KAGd0mB,EAAc3mB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmB2jB,GACrCnZ,EAAWtN,EAAI8C,mBAAmB4jB,GAElCS,EACJpc,KAAKqc,MAAMT,EAAY/iB,EAAIyJ,EAAYzJ,EAAG+iB,EAAYhjB,EAAI0J,EAAY1J,GAMxE,OAHEoH,KAAKqc,MAAMT,EAAY/iB,EAAI0J,EAAS1J,EAAG+iB,EAAYhjB,EAAI2J,EAAS3J,GAGhDwjB,M,eC5GtBroB,EAAEuoB,iBAAmBvoB,EAAEmmB,WAAWhmB,OAAO,CACvCC,QAAS,CACPgmB,KAAM,aACNC,KAAMrmB,EAAEqmB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZuC,WAarC,IAAMrjB,EAAUxC,KAAK8lB,SACfxlB,EAAMkC,EAAQjC,KACd4lB,EAAe3jB,EAAQW,UAAUnD,KAAK+lB,SACtCK,EAAYpmB,KAAKgmB,YACjBrZ,EAAQ3M,KAAKwnB,oBAAoBrB,EAAcC,GAC/Cva,EAAQ7L,KAAK8mB,wBAAwBX,EAAcC,GAE3C,IAAVzZ,GAAenK,EAAQ6K,SAASV,EAAO,OAE3C,IAAIhG,EAAenE,EAAQmE,aACtBA,IAAgBA,EAAe,IAEpC,IAAMihB,EAAUtnB,EAAIunB,uBAAuBrlB,EAAQW,UAAU,IACvD2kB,EAAUxnB,EAAIunB,uBAAuBrlB,EAAQW,UAAU,IACvD+L,EAAI7D,KAAK0c,IAAIH,EAAQ3jB,EAAI6jB,EAAQ7jB,GACjCmL,EAAI/D,KAAK0c,IAAIH,EAAQ1jB,EAAI4jB,EAAQ5jB,GACtBmH,KAAKgc,KAAKnY,EAAIA,EAAIE,EAAIA,GACxBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAEhBrJ,EAAQoJ,QAAQ,IAIpBqa,aArCuC,WAsCrCjmB,KAAKse,UAAUte,KAAK8lB,SAAS3iB,UAAUnD,KAAK+lB,aAIhD3mB,EAAEmb,iBAAmB,SAAC/X,EAASwT,EAAKxW,GAClC,OAAO,IAAIJ,EAAEuoB,iBAAiBnlB,EAASwT,EAAKxW,K,eC3C9CJ,EAAE4oB,WAAa5oB,EAAEmmB,WAAWhmB,OAAO,CACjCC,QAAS,CACPgmB,KAAM,OACNyC,aAAa,EACbxC,KAAMrmB,EAAEqmB,KAAK,CAEXC,QAAS,ycACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrB/kB,SAZiC,SAYxBP,GACPN,KAAKkoB,gBACL9oB,EAAEmmB,WAAWtlB,UAAUY,SAASX,KAAKF,KAAMM,IAG7CkmB,eAjBiC,WAkB/B,IAAMf,EAAOzlB,KAAKuB,aAElBnC,EAAEmmB,WAAWtlB,UAAUumB,eAAetmB,KAAKF,MAE3CZ,EAAE8B,SAASR,GAAG+kB,EAAM,CAClBjkB,UAAWxB,KAAKmoB,WAChBC,QAASpoB,KAAKqoB,aACbroB,MAEHZ,EAAE8B,SAASR,GAAGsR,SAAU,eAAgBhS,KAAKqoB,YAAaroB,OAG5DymB,iBA9BiC,WA+B/B,IAAMhB,EAAOzlB,KAAKuB,aAElBnC,EAAEmmB,WAAWtlB,UAAUumB,eAAetmB,KAAKF,MAE3CZ,EAAE8B,SAASH,IAAI0kB,EAAM,CACnBjkB,UAAWxB,KAAKmoB,WAChBC,QAASpoB,KAAKqoB,aACbroB,MAEHZ,EAAE8B,SAASH,IAAIiR,SAAU,eAAgBhS,KAAKqoB,YAAaroB,OAI7D6lB,cA5CiC,aA+CjCI,aA/CiC,WAgD/BjmB,KAAKse,UAAUte,KAAK8lB,SAAS3iB,UAAUnD,KAAK+lB,WAG9CoC,WAnDiC,SAmDtBnnB,GACT,IAAMiH,EAAKjI,KAAK8lB,SAAS5M,YACnBpX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAK8lB,SAAStlB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAK8lB,SAAS5b,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAK8lB,WAA/D,CAIA,IAAMwC,EAAaxmB,EAAK0Y,aAExBxa,KAAKuoB,OAAS7G,WAAWtiB,EAAEwD,MAAK,WAC1B5C,KAAKwoB,UAAYC,aAAazoB,KAAKwoB,UAElCxoB,KAAK0oB,aAGRJ,EAAWzmB,WAAU,SAASyX,GACxBtZ,OAASsZ,GAAUA,EAAOqP,kBAHhC3oB,KAAK4oB,YAAY,UAAW,CAACC,WAAW,IAO1C7oB,KAAK8oB,gBACJ9oB,MAAO,OAGZqoB,YA7EiC,SA6ErBrnB,GACV,IAAMiH,EAAKjI,KAAK8lB,SAAS5M,YACnBpX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAK8lB,SAAStlB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAK8lB,SAAS5b,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAK8lB,WAA/D,CAIA,IAAMwC,EAAaxmB,EAAK0Y,aAEpBxZ,EAAE+nB,gBAAkB/W,UACtBsW,EAAWzmB,WAAU,SAASyX,GAC5BA,EAAOqP,kBAIP3oB,KAAKuoB,QAAUE,aAAazoB,KAAKuoB,QAErCvoB,KAAKwoB,SAAW9G,WAAWtiB,EAAEwD,MAAK,WAChC5C,KAAK2oB,iBACJ3oB,MAAO,SAIdZ,EAAEqb,WAAa,SAASjY,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAE4oB,WAAWxlB,EAASwT,EAAKxW,K,eCvGxCJ,EAAE4pB,aAAe5pB,EAAEmmB,WAAWhmB,OAAO,CACnCC,QAAS,CACPgmB,KAAM,SACNC,KAAMrmB,EAAEqmB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZmC,WAajC,IAAMrjB,EAAUxC,KAAK8lB,SACfK,EAAe3jB,EAAQW,UAAUnD,KAAK+lB,SACtCK,EAAYpmB,KAAKgmB,YACjBrZ,EAAQ3M,KAAKwnB,oBAAoBrB,EAAcC,GAMrD5jB,EAAQ6K,SAASV,EAAO,QAG1BsZ,aAzBmC,WA0BjCjmB,KAAKse,UAAUte,KAAK8lB,SAAS3iB,UAAUnD,KAAK+lB,aAIhD3mB,EAAEib,aAAe,SAAS7X,EAASwT,EAAKxW,GACtC,OAAO,IAAIJ,EAAE4pB,aAAaxmB,EAASwT,EAAKxW,K,eC/B1CJ,EAAE6pB,YAAc7pB,EAAEmmB,WAAWhmB,OAAO,CAClCC,QAAS,CACPgmB,KAAM,QACNC,KAAMrmB,EAAEqmB,KAAK,CACXC,QAEE,iiEACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZkC,WAahC,IAAMrjB,EAAUxC,KAAK8lB,SACfxlB,EAAMkC,EAAQjC,KAChBoG,EAAenE,EAAQmE,aACrBwf,EAAe3jB,EAAQW,UAAUnD,KAAK+lB,SACtCK,EAAYpmB,KAAKgmB,YACjBna,EAAQ7L,KAAK8mB,wBAAwBX,EAAcC,GAOpDzf,IAAgBA,EAAe,IACpC,IAAMihB,EAAUtnB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnD2kB,EAAUxnB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnD+L,EAAI7D,KAAK0c,IAAIH,EAAQ3jB,EAAI6jB,EAAQ7jB,GACjCmL,EAAI/D,KAAK0c,IAAIH,EAAQ1jB,EAAI4jB,EAAQ5jB,GACtBmH,KAAKgc,KAAKnY,EAAIA,EAAIE,EAAIA,GAExBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAMhBrJ,EAAQoJ,QAAQ,IAIpBqa,aA3CkC,WA4ChCjmB,KAAKse,UAAUte,KAAK8lB,SAAS3iB,UAAUnD,KAAK+lB,aAIhD3mB,EAAE6a,YAAc,SAASzX,EAASwT,EAAKxW,GACrC,OAAO,IAAIJ,EAAE6pB,YAAYzmB,EAASwT,EAAKxW,K,eCjDzCJ,EAAE0Q,iBAAmB1Q,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBiI,iBAAmB,GAEtCvT,EAAEsL,iBAAiBwe,WAAa9pB,EAAE2gB,SAASoJ,QAAQ5pB,OAAO,IAE1DH,EAAE0Q,iBAAiB2F,WAAa,SAASjW,GACvC,OAAO,IAAIJ,EAAEsL,iBAAiBwe,WAAW1pB,IAI3CJ,EAAEC,sBAAsBsQ,aAAY,WAElC3P,KAAKopB,QAAU,CACbhqB,EAAE8W,aACF9W,EAAEyV,aACFzV,EAAEiV,WACFjV,EAAE8U,cAIJ9U,EAAEC,sBAAsBoT,KAAKiH,MAAQ,CACnCoB,KAAM1b,EAAEiV,WACRgV,OAAQjqB,EAAE8U,cAGZ,IAAMqQ,EAAIvkB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAKopB,QAE7DppB,KAAKQ,QAAUpB,EAAEmH,sBAAsBzE,KAAK9B,KAAM,CAACiT,QAASsR,Q,cC7B9DnlB,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEsL,iBAAiBC,SAAWvL,EAAE2gB,SAASuJ,MAAM/pB,OAAO,CACpDC,QAAS,CACP+pB,OAAQ,CAAC,GAAI,KAGfzpB,WALoD,SAKzC0K,EAAQhL,GACjBJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAE2gB,SAASuJ,MAAMrpB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQhL,IAG3D0Q,SAVoD,SAU3C5P,EAAKya,GACZ/a,KAAKM,IAAMA,EACXN,KAAK+a,GAAKA,GAGZyO,MAfoD,WAgBlD,GAAIxpB,KAAKojB,IACP,OAAOpjB,KAAKojB,IAAIqG,UAIpBjL,UArBoD,SAqB1CkL,GAER,IADA,IAAIF,EAAQxpB,KAAKwpB,QACRxmB,EAAI,EAAGA,EAAIwmB,EAAM3kB,OAAQ7B,IAAK,CACrC,IAAI2mB,EAAOH,EAAMzT,KAAK/S,GAAGymB,SAAS,GAClC,GAAIrqB,EAAE6C,QAAQQ,SAASknB,EAAMD,GAE3B,OADAC,EAAKC,QACED,EAGX,OAAO,KAIXvqB,EAAE0Q,iBAAiBuO,SAAW,SAAS7T,EAAQhL,GAC7C,OAAO,IAAIJ,EAAEsL,iBAAiBC,SAASH,EAAQhL,IAGjDJ,EAAEoH,wBAAwBmJ,aAAY,WAEpC3P,KAAKopB,QAAU,CACbhqB,EAAEwgB,WACFxgB,EAAE8kB,YACF9kB,EAAEqgB,cACFrgB,EAAE2kB,aACF3kB,EAAE+iB,iBACF/iB,EAAEiV,WACFjV,EAAEmd,cACFnd,EAAEud,gBACFvd,EAAEyd,aACFzd,EAAE8W,aACF9W,EAAEyV,cAIJzV,EAAEsL,iBAAiB+H,KAAKiH,MAAQ,CAC9BrY,KAAMjC,EAAEwgB,WACR/T,MAAOzM,EAAE8kB,YACTvJ,QAASvb,EAAEqgB,cACX7E,OAAQxb,EAAE2kB,aACVlJ,WAAYzb,EAAE+iB,iBACdrH,KAAM1b,EAAEiV,YAGV,IAAMkQ,EAAIvkB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAKopB,QAE7DppB,KAAKQ,QAAUpB,EAAE0Q,iBAAiBhO,KAAK9B,KAAM,CAACiT,QAASsR,Q,eCrEzDnlB,EAAEyqB,QAAUzqB,EAAE0qB,MAAMvqB,OAAO,CAEzBwqB,KAAM,2CAENC,SAAU,GAEV3X,OANyB,WAQvB,OADArS,KAAKiqB,WAAWjqB,KAAKgqB,UACdhqB,KAAK+pB,MAGdE,WAXyB,SAWdC,GACTlqB,KAAK+pB,MAAQG,M,eCdjB9qB,EAAEgT,iBAAmBhT,EAAEyqB,QAAQtqB,OAAO,CAEpCyqB,SAEI,8T,eCHN5qB,EAAEqhB,eAAiBrhB,EAAEyqB,QAAQtqB,OAAO,CAClCyqB,SACE,uqT,eCHJ5qB,EAAEsQ,IAAIya,aAAa,CACjBC,cAAc,EACdC,SAAS,IAOXjrB,EAAEsQ,IAAI4a,aAAelrB,EAAEsQ,IAAI6a,QAAQhrB,OAAO,CACxCO,WADwC,SAC7BQ,GACTN,KAAKO,KAAOD,EACZN,KAAKoQ,WAAa9P,EAAI8P,WACtBpQ,KAAKwqB,MAAQlqB,EAAImqB,OAAOC,YACxB1qB,KAAK2qB,mBAAqB,EAC1BrqB,EAAII,GAAG,SAAUV,KAAK4qB,SAAU5qB,OAGlCkQ,SATwC,WAUtC9Q,EAAE8B,SAASR,GAAGV,KAAKoQ,WAAY,YAAapQ,KAAK6qB,aAAc7qB,OAGjE8Q,YAbwC,WActC1R,EAAE8B,SAASH,IAAIf,KAAKoQ,WAAY,YAAapQ,KAAK6qB,aAAc7qB,OAGlE8qB,MAjBwC,WAkBtC,OAAO9qB,KAAK+qB,QAGdH,SArBwC,WAsBtCxrB,EAAE6C,QAAQ8O,OAAO/Q,KAAKwqB,cACfxqB,KAAKwqB,OAGdQ,YA1BwC,WA2BtChrB,KAAK2qB,mBAAqB,EAC1B3qB,KAAK+qB,QAAS,GAGhBE,yBA/BwC,WAgCN,IAA5BjrB,KAAK2qB,qBACPlC,aAAazoB,KAAK2qB,oBAClB3qB,KAAK2qB,mBAAqB,IAI9BE,aAtCwC,SAsC3B7pB,GACX,IAAKA,EAAE8B,UAAyB,IAAZ9B,EAAEkqB,OAA4B,IAAblqB,EAAEyQ,OACrC,OAAO,EAKTzR,KAAKirB,2BACLjrB,KAAKgrB,cAEL5rB,EAAE6C,QAAQkpB,uBACV/rB,EAAE6C,QAAQmpB,mBAEVprB,KAAKqrB,YAAcrrB,KAAKO,KAAK+qB,2BAA2BtqB,GAExD5B,EAAE8B,SAASR,GAAGsR,SAAU,CACtBtQ,YAAatC,EAAE8B,SAASwd,KACxB6M,UAAWvrB,KAAKwrB,aAChBpD,QAASpoB,KAAKyrB,YACbzrB,OAGLwrB,aA5DwC,SA4D3BxqB,GACNhB,KAAK+qB,SACR/qB,KAAK+qB,QAAS,EAEd/qB,KAAK0rB,KAAOtsB,EAAE6C,QAAQgP,OAAO,MAAO,mBAAoBjR,KAAKoQ,YAC7DhR,EAAE6C,QAAQ4N,SAAS7P,KAAKoQ,WAAY,qBAEpCpQ,KAAKO,KAAKsI,KAAK,iBAGjB7I,KAAK2rB,OAAS3rB,KAAKO,KAAK+qB,2BAA2BtqB,GAEnDhB,KAAK4rB,QAAUxsB,EAAEysB,OAAO7rB,KAAKqrB,YAAarrB,KAAK2rB,QAC/C,IAAIG,EAAO9rB,KAAK4rB,QAAQG,UAExB3sB,EAAE6C,QAAQ+pB,YAAYhsB,KAAK0rB,KAAM1rB,KAAK4rB,QAAQK,KAE9CjsB,KAAK0rB,KAAKvf,MAAMpG,MAAQ+lB,EAAK7nB,EAAI,KACjCjE,KAAK0rB,KAAKvf,MAAMnG,OAAS8lB,EAAK5nB,EAAI,MAGpCgoB,QAjFwC,WAkFlClsB,KAAK+qB,SACP3rB,EAAE6C,QAAQ8O,OAAO/Q,KAAK0rB,MACtBtsB,EAAE6C,QAAQ8R,YAAY/T,KAAKoQ,WAAY,sBAGzChR,EAAE6C,QAAQkqB,sBACV/sB,EAAE6C,QAAQmqB,kBAEVhtB,EAAE8B,SAASH,IAAIiR,SAAU,CACvBtQ,YAAatC,EAAE8B,SAASwd,KACxB6M,UAAWvrB,KAAKwrB,aAChBpD,QAASpoB,KAAKyrB,YACbzrB,OAGLyrB,WAjGwC,SAiG7BzqB,GACT,IAAgB,IAAZA,EAAEkqB,OAA4B,IAAblqB,EAAEyQ,UAIvBzR,KAAKksB,UAEAlsB,KAAK+qB,QAAV,CAIA/qB,KAAKirB,2BACLjrB,KAAK2qB,mBAAqBjJ,WACtBtiB,EAAE6N,KAAKrK,KAAK5C,KAAKgrB,YAAahrB,MAAO,GAEzC,IAAI6rB,EAASzsB,EAAE4K,aACXhK,KAAKO,KAAK8rB,uBAAuBrsB,KAAK4rB,QAAQU,iBAC9CtsB,KAAKO,KAAK8rB,uBAAuBrsB,KAAK4rB,QAAQW,gBAG9CxhB,EAAO/K,KAAKO,KAAKuJ,UACjBT,EAASrJ,KAAKO,KAAKgJ,YAGvBsiB,EAAS7rB,KAAKO,KAAKmU,8BAA8BmX,EAAQ9gB,EAAM1B,GAE/DrJ,KAAKO,KAAKsI,KAAK,gBAAiB,CAAC2L,iBAAkBqX,QAIvDzsB,EAAEsQ,IAAIC,YAAY,aAAc,eAAgBvQ,EAAEsQ,IAAI4a,e,eCxItDlrB,EAAEsQ,IAAIya,aAAa,CACjBvhB,mBAAmB,IAOrBxJ,EAAEsQ,IAAI8c,kBAAoBptB,EAAEsQ,IAAI+c,gBAAgBltB,OAAO,CACrDkB,OADqD,WAEnD,IAAMH,EAAMN,KAAKO,KAEjB,OAAIP,KAAKyT,WAGLnT,EAAIqI,gBAAgB3G,WACtB1B,EAAIqI,gBAAgB7H,UAGtBd,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAVuBlQ,MAc9Bc,QAlBqD,WAmBnD,OAAKd,KAAKyT,UAEVzT,KAAKyT,UAAW,EAChBzT,KAAK8Q,cAEE9Q,MALsBA,MAQ/B0sB,cA3BqD,SA2BvC1rB,GACZ,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGTD,GAAMA,EAAG9Q,WAEbxC,EAAIqsB,UAAY,EAChB3sB,KAAKO,KAAKqsB,cAAgBlL,YAAW,WACd,IAAjBphB,EAAIqsB,UACNrsB,EAAIqsB,SAAW,EACfrsB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQwlB,OAAUjZ,GAAMA,EAAGkZ,mBAAmBC,kBAClDzsB,EAAIuI,KAAK,cAGZ,OAGLmkB,eAhDqD,WAiDnD,IAAM1sB,EAAMN,KAAKO,KACX0sB,EAAS3sB,EAAI4sB,QAEnBxL,YAAW,WACTphB,EAAIqsB,SAAW,EACflE,aAAanoB,EAAIssB,iBAChB,GAEEK,IAE0B,IAA3BA,EAAOztB,QAAQ8Y,SACjB2U,EAAOztB,QAAQ8Y,QAAU,EACzB2U,EAAO/R,WAAW,KAElB+R,EAAOztB,QAAQ8Y,QAAU,EACzB2U,EAAO/R,WAAW,QAKxB9b,EAAEsQ,IAAIC,YAAY,aAAc,oBAAqBvQ,EAAEsQ,IAAI8c,oB,eCxE3DptB,EAAEsQ,IAAI+c,gBAAgBU,QAAQ,CAC5Bjd,SAD4B,WAE1BlQ,KAAKO,KAAKG,GAAG,CACXkpB,MAAO5pB,KAAK0sB,cACZvT,SAAUnZ,KAAKgtB,gBACdhtB,OAGL8Q,YAR4B,WAS1B9Q,KAAKO,KAAKQ,IAAI,CACZ6oB,MAAO5pB,KAAK0sB,cACZvT,SAAUnZ,KAAKgtB,gBACdhtB,OAGLS,OAf4B,WAgB1B,OAAIT,KAAKyT,UAGLzT,KAAKO,KAAKqI,mBACR5I,KAAKO,KAAKqI,kBAAkB5G,YAMlChC,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAbuBlQ,MAiB9Bc,QAjC4B,WAkC1B,OAAKd,KAAKyT,UAGVzT,KAAKO,KAAKsI,KAAK,kBAEf7I,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAPsBA,MAU/B0sB,cA5C4B,SA4Cd1rB,GACZ,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGTD,GAAMA,EAAG9Q,WAEbxC,EAAIqsB,UAAY,EAChB3sB,KAAKO,KAAKqsB,cAAgBlL,YAAW,WACd,IAAjBphB,EAAIqsB,UACNrsB,EAAIqsB,SAAW,EACfrsB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQwlB,OAAUjZ,GAAMA,EAAGkZ,mBAAmBC,kBAIlDzsB,EAAI8sB,cAAcxZ,EAAI,WAAY,CAACtT,MAGtC,OAGL0sB,eApE4B,SAoEbhsB,GACb,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAOb,GALA6N,YAAW,WACTphB,EAAIqsB,SAAW,EACflE,aAAanoB,EAAIssB,iBAChB,IAEEhZ,EAAM,OAAO,EAElB,IAAMyZ,EAAU/sB,EAAIwJ,UACdxG,EAAQhD,EAAId,QAAQ8tB,UACpBviB,EAAO6I,EAAG9Q,SAAWuqB,EAAU/pB,EAAQ+pB,EAAU/pB,EAEnB,WAAhChD,EAAId,QAAQmJ,gBACdrI,EAAIitB,QAAQxiB,GAEZzK,EAAIktB,cAAcxsB,EAAEysB,eAAgB1iB,O,eC1F1C3L,EAAEsQ,IAAIyd,QAAQ,CAEZR,SAAU,EAEVe,gBAJY,SAIIrX,GAiCd,OA9BAA,EAAOrW,KAAK2tB,cAAgBvuB,EAAEG,OAAO,CACnCquB,cAAe,GACfC,QAAS,GACTC,cAAe,GACfC,QAAS,EACTd,QAAQ,EACRe,aAAc,EACdplB,mBAAmB,GAClByN,IAEO4W,SACRjtB,KAAK2tB,cAAgBvuB,EAAEG,OAAOS,KAAK2tB,cAAe,CAChDK,aAAc3X,EAAK4W,OAAS,OAAI5X,EAChCzM,oBAAmByN,EAAK4W,aAAgB5X,KAI5CrV,KAAKiuB,cAAgB7uB,EAAE8uB,UAnBX,oDAmB0B,CACpCL,QAASxX,EAAKwX,QACdC,cAAezX,EAAKyX,cACpBC,QAAS1X,EAAK0X,QACdzV,QAASjC,EAAKuX,gBACbhc,MAAM5R,MAELqW,EAAK4W,OAAUjtB,KAAKmuB,WAAW9X,GAGjCrW,KAAK4I,uBAAoByM,EAGpBrV,MAGTmuB,WAxCY,SAwCD9X,GAsBT,OAnB0B,IAAtBA,EAAK2X,cAA4C,IAAtB3X,EAAK2X,eAClC3X,EAAK2X,aAAe,GAGtBhuB,KAAKktB,QAAU9tB,EAAE8uB,UANL,8EAMoB,CAC9BE,YAAa,0OACbC,WAAY,OACZpG,aAAa,EACb3P,QAASjC,EAAK2X,aACdH,QAASxX,EAAKwX,QACdC,cAAezX,EAAKyX,cACpBC,QAAS1X,EAAK0X,QACdO,IAAK,QACJ1c,MAAM5R,MAELA,KAAK2tB,cAAc/kB,mBACrB5I,KAAK4I,kBAAkBnI,SAGlBT,QAKXZ,EAAEsQ,IAAIC,aAAY,WAChB3P,KAAK4I,kBAAkB9H,UACvBd,KAAK2I,gBAAgBlI,a,eCtEvBrB,EAAE6C,QAAU7C,EAAEG,OAAOH,EAAE6C,QAAS,CAC9B7B,gBAD8B,SACdmuB,GACdvuB,KAAKyO,YAAc8f,GAGrB/f,gBAL8B,SAKd0U,GACd,IAAMjV,EAAO7O,EAAEiI,QAAQ6G,UAAY9O,EAAEiI,QAAQmnB,SAAWpvB,EAAEiI,QAAQonB,KAS5DviB,EAAS,CACbgX,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjBA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjB,EAAG,EAAG,EAAG,EACTA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,IAGbwL,EAAMzgB,EAAO,YAAc/B,EAAOyC,KAAK,KAAO,IAAM,GAQ1D,OANKV,GACH+I,QACKC,IAAI,uFAIJyX,GAGTxsB,YAjC8B,SAiClBgQ,EAAIL,GACd,IAAM3O,EAAI2O,EACV,OAAO7R,KAAKyC,SAASyP,EAAIhP,GACvBlD,KAAK+T,YAAY7B,EAAIhP,GAAKlD,KAAK6P,SAASqC,EAAIhP,IAGhDga,cAvC8B,WAwC5B,OAAO7D,OAAOsV,QAAQ3uB,KAAKyO,YAAYmgB,qBAGzC5Z,eA3C8B,SA2CfD,GACb,GAAU,IAANA,EAAW,OAAO/U,KAAKkd,gBAE3B,IACI2R,EADEpgB,EAAczO,KAAKyO,YAAYqgB,qBASrC,OALED,EADyB,mBAAhBpgB,EACIA,EAAYsG,GAEZtG,EAGR4K,OAAOsV,QAAQE,O,cCvD1BzvB,EAAEkS,SAAW,CAMXL,OANW,SAMJ8d,GAKL,MAJI,KAAKC,KAAKD,KACZA,EAAMA,EAAIE,QAAQ,KAAM,KAIxB,4BAA8BF,EAA9B,mDACuBA,EADvB,kBAMJ7M,cAlBW,SAkBGlR,EAAWke,GACvB,IAAMjQ,EAAMjO,EAAUiB,cAAc,OAEhCgN,GACF7f,EAAE6C,QAAQ4N,SAASoP,EAAKiQ,IAK5B9P,YA3BW,SA2BCpO,EAAWme,EAAMC,GACtB,KAAKJ,KAAKG,KACbA,EAAO,IAAMA,GAEV,KAAKH,KAAKI,KACbA,EAAO,IAAMA,GAGf,IAAMxQ,EAAM5N,EAAUiB,cAAc,OACpC,GAAI2M,EAAK,CACP,IAAMyQ,EAAUzQ,EAAI0Q,aAAa,gBAAkBH,EAAOC,EAAOD,EAEjE,OADAvQ,EAAI1N,aAAa,aAAcme,GACxBA,EAET,OAAO,GAGTvd,YA5CW,SA4CCd,EAAWue,EAAQC,GAC7B,IAAMH,EAAUre,EAAUse,aAAa,WAAaC,EAASC,EAASD,EAMtE,OAJAve,EAAUE,aAAa,QAASme,GAC5Bre,EAAUye,aAAa,eACzBze,EAAUE,aAAa,aAAcme,GAEhCA,K,eCnDXjwB,EAAE+G,UAAY,CAEZC,cAFY,SAEE5D,GACZ,IAAIlC,EAAMkC,EAAQjC,KAMlB,OAAe,IAJJD,EACN8C,mBAAmBZ,EAAQW,UAAU,IACrCusB,WAAWpvB,EAAI8C,mBAAmBZ,EAAQW,UAAU,KAEnCX,EAAQjB,aAAawE,S,eCT/C3G,EAAEmQ,WAAa,CAGbogB,IAHa,SAGTzM,GACF,MAAO,CACLA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAK/D0M,OAZa,SAYNrL,EAAGpF,GACR,IACInc,EADEE,EAAI,GAGV,IAAKF,EAAI,EAAGA,EAAI,EAAGA,IACjB,IAAK,IAAIiM,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAG1B,IAFA,IAAI4gB,EAAM,EAEDpkB,EAAI,EAAGA,EAAI,EAAGA,IACrBokB,GAAOtL,EAAE,EAAEvhB,EAAIyI,GAAG0T,EAAE,EAAE1T,EAAIwD,GAG5B/L,EAAE,EAAEF,EAAIiM,GAAK4gB,EAIjB,OAAO3sB,GAIT4sB,OAhCa,SAgCN5M,EAAG6M,GACR,MAAO,CACL7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAC/B7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAC/B7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,KAKnCC,OAzCa,SAyCN5L,EAAGlB,GAGR,IAFA,IAAMhX,EAAS,GAENlJ,EAAI,EAAG2f,EAAIO,EAAEre,OAAQ7B,EAAI2f,EAAG3f,IACnCkJ,EAAOtG,KAAKwe,EAAElB,EAAElgB,IAGlB,OAAOkJ,GAGT+jB,cAnDa,SAmDCC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACxC,IAAMvN,EAAI,CACRgN,EAAIE,EAAIE,EACRH,EAAIE,EAAIE,EACR,EAAG,EAAG,GAEFR,EAAI3wB,EAAEmQ,WAAWugB,OAAO1wB,EAAEmQ,WAAWogB,IAAIzM,GAAI,CAACsN,EAAIC,EAAI,IAE5D,OAAOrxB,EAAEmQ,WAAWqgB,OAAO1M,EAAG,CAC5B6M,EAAE,GAAI,EAAG,EACT,EAAGA,EAAE,GAAI,EACT,EAAG,EAAGA,EAAE,MAIZzmB,QAlEa,SAkEL4Z,EAAGjf,EAAGC,GACZ,IAAM6rB,EAAI3wB,EAAEmQ,WAAWugB,OAAO5M,EAAG,CAACjf,EAAGC,EAAG,IAExC,MAAO,CAAC6rB,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,KAG5BvgB,oBAxEa,SAyETkhB,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,GAEjB,IAAMrN,EAAIhlB,EAAEmQ,WAAW0gB,cAAcS,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClE5R,EAAIvgB,EAAEmQ,WAAW0gB,cAAcW,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClEvO,EAAI9jB,EAAEmQ,WAAWqgB,OAAOjQ,EAAGvgB,EAAEmQ,WAAWogB,IAAIvL,IAKlD,OAAOhlB,EAAEmQ,WAAWygB,OAAO,EAAE9M,EAAE,GAAIA,M,eCrFvC9jB,EAAEwN,SAAW,CAEXC,UAFW,SAED5I,EAAGC,GAAiB,IAAd+H,EAAc,uDAAP,MACrB,MAAgB,QAATA,EACHjM,KAAKgN,iBAAiB3B,KAAKqc,MAAMxjB,EAAGD,IACpCoH,KAAKqc,MAAMxjB,EAAGD,IAGpB+I,iBARW,SAQML,GACf,OAAgB,IAARA,EAAetB,KAAKyB,IAG9BS,iBAZW,SAYMZ,GACf,OAAQA,EAAQtB,KAAKyB,GAAM,O,eCb/B1N,EAAEe,MAAQ,CACRC,gBADQ,WAEN,IAAMqO,EAAc,CAClB6Q,YAAa,eACbE,aAAc,gBACdE,aAAc,gBACdG,UAAW,aACXmB,YAAa,eACbC,aAAc,gBACdnC,aAAc,gBACdC,UAAW,aACXqD,gBAAiB,oBACjBG,eAAgB,kBAChBK,SAAU,YACVC,WAAY,cACZc,gBAAiB,oBACjBC,qBAAsB,yBACtBE,aAAc,wBACdE,YAAa,eACbG,WAAY,cACZE,aAAc,iBACdC,YAAa,gBACbE,aAAc,gBACdoK,mBACE,qEACFE,qBACE,wEAGJ,GAAK9uB,KAAKR,QAAQiP,YAIhB,IAAK,IAAMkF,KAAOlF,EACXzO,KAAKR,QAAQiP,YAAYkP,eAAehK,KAC3C3T,KAAKR,QAAQiP,YAAYkF,GAAOlF,EAAYkF,SALhD3T,KAAKR,QAAQiP,YAAcA,EAU7BrP,EAAE6C,QAAQ7B,gBAAgBJ,KAAKR,QAAQiP,cAGzC0E,aA3CQ,SA2CKob,EAAK5a,EAAK+d,GAErB,MADY,CAAC/d,EAAK+d,GACPjtB,QAAO,SAAS8pB,EAAK9iB,GAC9B,OAAO8iB,GAAOA,EAAI9iB,KACjB8iB,OC7CPoD,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,O","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
    ' +\n /* eslint-disable */\n '' +\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\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 = 1;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\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) + 13 }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' ? '' : '_toggleOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 var map = overlay._map;\n\n var 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 var 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index d089c7e8c..620dfb3d9 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -24,7 +24,7 @@ L.OpacitiesToolbar2 = L.Toolbar2.extend({ className: '', filter: function() { return true; }, actions: [], - style: `translate(-1px, -${ (opacities.length + 1) * 30 }px)`, + style: `translate(-1px, -${ ((opacities.length + 1) * 30) + 13 }px)`, }, appendToContainer(container) { From 5314481bad694f244e59f8cb5119b60e08b486a2 Mon Sep 17 00:00:00 2001 From: themacboy Date: Tue, 8 Nov 2022 09:47:16 +0100 Subject: [PATCH 65/73] correct vertical displacement --- src/edit/actions/OpacitiesAction.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 620dfb3d9..66de59bb0 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -24,7 +24,7 @@ L.OpacitiesToolbar2 = L.Toolbar2.extend({ className: '', filter: function() { return true; }, actions: [], - style: `translate(-1px, -${ ((opacities.length + 1) * 30) + 13 }px)`, + style: `translate(-1px, -${ ((opacities.length + 1) * 30) + 10 }px)`, }, appendToContainer(container) { From 18ec9c33523f0eac2212eee57da6aa641cd8364f Mon Sep 17 00:00:00 2001 From: themacboy Date: Tue, 8 Nov 2022 09:53:09 +0100 Subject: [PATCH 66/73] re-build --- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 61f7d3eca..515161b48 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];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)+13,"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;is||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];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)+10,"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;is||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 2d0bb202d..2323f0c9e 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
    ' +\n /* eslint-disable */\n '' +\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\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 = 1;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\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) + 13 }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' ? '' : '_toggleOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 var map = overlay._map;\n\n var 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 var 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
    ' +\n /* eslint-disable */\n '' +\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\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 = 1;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\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) + 10 }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' ? '' : '_toggleOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 var map = overlay._map;\n\n var 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 var 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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 From 453d7bec2c0bfa5d4aa1b8b99219dad370e4fa09 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 13 Nov 2022 15:32:33 +0100 Subject: [PATCH 67/73] incliude CSS overwrites --- src/edit/actions/OpacitiesAction.js | 38 +++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 66de59bb0..41cb8c5ea 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -1,5 +1,39 @@ let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100. +// Add custom CSS scripts and overwrites +if ([...document.styleSheets].every((sheet => sheet.title != 'Subtoolbar_css_overwrites'))) { + const subtoolbarCss = new CSSStyleSheet(); + subtoolbarCss.title = 'Subtoolbar_css_overwrites'; + subtoolbarCss.insertRule( + `.leaflet-toolbar-icon-vertical { + box-sizing: border-box !important; + display: block !important; + width: 30px !important; + height: 30px !important; + line-height: 30px !important; + padding: 0 !important; + text-align: center !important; + text-decoration: none !important; + background-color: #fff; + border: inset 0.5px lightgray !important; + font-size: 12px !important; + font-weight: bold !important; + color:#0087A8 !important; + float: none !important; + margin: auto !important; + z-index:900 !important; + } + ` + ); + + subtoolbarCss.insertRule( + `.leaflet-toolbar-1 li:first-child a { + border-radius: 4px 4px 0px 0px !important; + }` + ); + document.adoptedStyleSheets = [...document.adoptedStyleSheets, subtoolbarCss]; +} + opacities = opacities.map((o) => { (isNaN(o) || o > 100) ? o = 100 : o; (o < 0) ? o = 0 : o; @@ -24,7 +58,7 @@ L.OpacitiesToolbar2 = L.Toolbar2.extend({ className: '', filter: function() { return true; }, actions: [], - style: `translate(-1px, -${ ((opacities.length + 1) * 30) + 10 }px)`, + style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`, }, appendToContainer(container) { @@ -80,7 +114,7 @@ L.OpacitiesAction = L.EditAction.extend({ actions: opacities, }); - L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacities'; + L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities'; L.EditAction.prototype.initialize.call(this, map, overlay, options); }, From 289f527a749cc92f1e4a73486bb8a5f39488a481 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 13 Nov 2022 17:55:57 +0100 Subject: [PATCH 68/73] correct _opacity assignement after opacities change --- src/edit/DistortableImage.Edit.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/edit/DistortableImage.Edit.js b/src/edit/DistortableImage.Edit.js index d3a4aea80..cb22b9d01 100644 --- a/src/edit/DistortableImage.Edit.js +++ b/src/edit/DistortableImage.Edit.js @@ -362,14 +362,13 @@ L.DistortableImage.Edit = L.Handler.extend({ _setOpacities(o) { const image = this._overlay.getElement(); - let opacity = o; - + this._opacity = o; if (!this.hasTool(L.OpacitiesAction)) { return; } - (this.opacity < 1) ? this._transparent = true : this._transparent = false; + (this._opacity < 1) ? this._transparent = true : this._transparent = false; - L.DomUtil.setOpacity(image, opacity); - image.setAttribute('opacity', opacity); + L.DomUtil.setOpacity(image, this._opacity); + image.setAttribute('opacity', this._opacity); this._refresh(); }, From 14bfa90f98863656d5c64f1cb96027cbe6dba085 Mon Sep 17 00:00:00 2001 From: themacboy Date: Sun, 13 Nov 2022 18:06:52 +0100 Subject: [PATCH 69/73] mini bug --- src/edit/DistortableImage.Edit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/edit/DistortableImage.Edit.js b/src/edit/DistortableImage.Edit.js index cb22b9d01..7f1de6ccf 100644 --- a/src/edit/DistortableImage.Edit.js +++ b/src/edit/DistortableImage.Edit.js @@ -14,7 +14,7 @@ L.DistortableImage.Edit = L.Handler.extend({ this._mode = overlay.options.mode; this._transparent = false; this._outlined = false; - this._opacity = 1; + this._opacity = options.opacity; L.setOptions(this, options); From 3b5b58fcae289b5e54fa9c914524d4f7f47b152e Mon Sep 17 00:00:00 2001 From: themacboy Date: Mon, 14 Nov 2022 22:18:30 +0100 Subject: [PATCH 70/73] correct custom CSSStyleSheet --- dist/leaflet.distortableimage.css | 22 ---------- dist/leaflet.distortableimage.js | 2 +- dist/leaflet.distortableimage.js.map | 2 +- src/edit/actions/OpacitiesAction.js | 63 +++++++++++++--------------- 4 files changed, 32 insertions(+), 57 deletions(-) diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 6b9c6383e..7da145f21 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -221,28 +221,6 @@ a.leaflet-toolbar-icon[title='Loading...'] { fill: #c10d0d; } -.leaflet-toolbar-icon-vertical { - display: block !important; - width: 30px !important; - height: 30px !important; - line-height: 30px !important; - padding: 0 !important; - text-align: center !important; - text-decoration: none !important; - background-color: #fff; - border: inset 0.5px lightgray !important; - font-size: 12px !important; - font-weight: bold !important; - color:#0087A8 !important; - float: none !important; - margin: auto !important; - z-index:900; -} - -.leaflet-toolbar-1 li:first-child a { - border-radius: 4px 4px 0px 0px !important; -} - input[type="text"]::-webkit-input-placeholder { color: #979797; } diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 515161b48..3ce759c4c 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,2 +1,2 @@ -!function(){var t={808:function(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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=1,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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),this._refresh())},_setOpacities:function(t){var e=this._overlay.getElement(),i=t;this.hasTool(L.OpacitiesAction)&&(this.opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,i),e.setAttribute("opacity",i),this._refresh())},_toggleBorder:function(){var t,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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];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)+10,"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;is||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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(){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"),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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:this.getLayerId(e),src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),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,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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;is||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 2323f0c9e..9b2f37efd 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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
    ' +\n /* eslint-disable */\n '' +\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\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 = 1;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n let opacity = o;\n\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this.opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\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) + 10 }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' ? '' : '_toggleOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 var map = overlay._map;\n\n var 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 var 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
    ' +\n /* eslint-disable */\n '' +\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\n this.toolbar = L.distortableImage.controlBar({\n actions: this.editActions,\n position: 'topleft',\n }).addTo(map, group);\n },\n\n _removeToolbar() {\n const map = this._group._map;\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n } else {\n return false;\n }\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n }\n return this;\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (this.editActions[idx] === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n return true;\n } else {\n return false;\n }\n });\n return this;\n },\n\n startExport() {\n if (!this.hasTool(L.ExportAction)) { return; }\n\n return new Promise((resolve) => {\n const opts = this._exportOpts;\n opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion\n\n let statusUrl;\n this.updateInterval = null;\n\n // this may be overridden to update the UI to show export progress or completion\n const _defaultUpdater = (data) => {\n data = JSON.parse(data);\n // optimization: fetch status directly from google storage:\n if (data.status_url) {\n if (statusUrl !== data.status_url && data.status_url.match('.json')) {\n // if (data.status_url && data.status_url.substr(0,1) === \"/\") {\n // opts.statusUrl = opts.statusUrl + data.status_url;\n // } else {\n statusUrl = data.status_url;\n // }\n }\n\n if (data.status === 'complete') {\n clearInterval(this.updateInterval);\n\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n resolve();\n if (data.jpg !== null) {\n alert('Export succeeded. ' + opts.exportUrl + data.jpg);\n }\n }\n\n // TODO: update to clearInterval when status == \"failed\" if we update that in this file:\n // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb\n console.log(data);\n }\n };\n\n // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json;\n // this may be overridden to integrate with any UI\n const _defaultHandleStatusRes = (data) => {\n statusUrl = opts.statusUrl + data;\n // repeatedly fetch the status.json\n this.updateInterval = setInterval(() => {\n const reqOpts = {method: 'GET'};\n const req = new Request(`${statusUrl}?${Date.now()}`, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(opts.updater);\n }, opts.frequency);\n };\n\n // initiate the export\n const _defaultFetchStatusUrl = (mergedOpts) => {\n const form = new FormData();\n form.append('collection', JSON.stringify(mergedOpts.collection));\n form.append('scale', mergedOpts.scale);\n form.append('upload', true);\n\n const reqOpts = {method: 'POST', body: form};\n const req = new Request(mergedOpts.exportStartUrl, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(mergedOpts.handleStatusRes);\n };\n\n // If the user has passed collection property\n this.customCollection = !!opts.collection;\n if (!this.customCollection) {\n opts.collection = this._group.generateExportJson().images;\n }\n\n opts.frequency = opts.frequency || 3000;\n opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel !\n opts.updater = opts.updater || _defaultUpdater;\n opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes;\n opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl;\n\n opts.fetchStatusUrl(opts);\n });\n },\n});\n\nL.distortableCollection.edit = (group, options) => {\n return new L.DistortableCollection.Edit(group, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// holds the keybindings & toolbar API for an individual image instance\nL.DistortableImage.Edit = L.Handler.extend({\n options: {\n opacity: 0.5,\n outline: '1px solid red',\n keymap: L.distortableImage.action_map,\n },\n\n initialize(overlay, options) {\n this._overlay = overlay;\n this._toggledImage = false;\n this._mode = overlay.options.mode;\n this._transparent = false;\n this._outlined = false;\n this._opacity = options.opacity;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n this._opacity = o;\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this._opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, this._opacity);\n image.setAttribute('opacity', this._opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\n// Add custom CSS scripts and overwrites\nconst subtoolbarCss = new CSSStyleSheet();\nsubtoolbarCss.replaceSync(\n `.leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n `\n);\n\nsubtoolbarCss.insertRule(\n `.leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }`\n);\ndocument.adoptedStyleSheets = [subtoolbarCss];\n\nopacities = opacities.map((o) => {\n (isNaN(o) || o > 100) ? o = 100 : o;\n (o < 0) ? o = 0 : o;\n\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: o,\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nL.OpacitiesToolbar2 = L.Toolbar2.extend({\n options: {\n className: '',\n filter: function() { return true; },\n actions: [],\n style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`,\n },\n\n appendToContainer(container) {\n let baseClass = this.constructor.baseClass + '-' + this._calculateDepth();\n let className = baseClass + ' ' + this.options.className;\n let Action; let action;\n let i; let j; let l; let m;\n\n this._container = container;\n this._ul = L.DomUtil.create('ul', className, container);\n this._ul.style.transform = ( this.options.style ) ? this.options.style : '';\n\n // Ensure that clicks, drags, etc. don't bubble up to the map.\n // These are the map events that the L.Draw.Polyline handler listens for.\n // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but\n // if only 'mouseup' is silenced, then the map gets stuck in a halfway\n // state because it receives a 'mousedown' event and is waiting for the\n // corresponding 'mouseup' event.\n this._disabledEvents = [\n 'click', 'mousemove', 'dblclick',\n 'mousedown', 'mouseup', 'touchstart',\n ];\n\n for (j = 0, m = this._disabledEvents.length; j < m; j++) {\n L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation);\n }\n\n /* Instantiate each toolbar action and add its corresponding toolbar icon. */\n for (i = 0, l = this.options.actions.length; i < l; i++) {\n Action = this._getActionConstructor(this.options.actions[i]);\n\n action = new Action();\n action._createIcon(this, this._ul, this._arguments);\n }\n },\n});\n\n\nL.OpacitiesAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'opacities',\n tooltip: 'Set custom opacity',\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n options.subToolbar = new L.OpacitiesToolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 var map = overlay._map;\n\n var 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 var 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js index 41cb8c5ea..dbec2cabb 100644 --- a/src/edit/actions/OpacitiesAction.js +++ b/src/edit/actions/OpacitiesAction.js @@ -1,38 +1,35 @@ let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100. -// Add custom CSS scripts and overwrites -if ([...document.styleSheets].every((sheet => sheet.title != 'Subtoolbar_css_overwrites'))) { - const subtoolbarCss = new CSSStyleSheet(); - subtoolbarCss.title = 'Subtoolbar_css_overwrites'; - subtoolbarCss.insertRule( - `.leaflet-toolbar-icon-vertical { - box-sizing: border-box !important; - display: block !important; - width: 30px !important; - height: 30px !important; - line-height: 30px !important; - padding: 0 !important; - text-align: center !important; - text-decoration: none !important; - background-color: #fff; - border: inset 0.5px lightgray !important; - font-size: 12px !important; - font-weight: bold !important; - color:#0087A8 !important; - float: none !important; - margin: auto !important; - z-index:900 !important; - } - ` - ); - - subtoolbarCss.insertRule( - `.leaflet-toolbar-1 li:first-child a { - border-radius: 4px 4px 0px 0px !important; - }` - ); - document.adoptedStyleSheets = [...document.adoptedStyleSheets, subtoolbarCss]; -} +// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers. +const subtoolbarCss = new CSSStyleSheet(); +subtoolbarCss.replaceSync( + `.leaflet-toolbar-icon-vertical { + box-sizing: border-box !important; + display: block !important; + width: 30px !important; + height: 30px !important; + line-height: 30px !important; + padding: 0 !important; + text-align: center !important; + text-decoration: none !important; + background-color: #fff; + border: inset 0.5px lightgray !important; + font-size: 12px !important; + font-weight: bold !important; + color:#0087A8 !important; + float: none !important; + margin: auto !important; + z-index:900 !important; + } + ` +); + +subtoolbarCss.insertRule( + `.leaflet-toolbar-1 li:first-child a { + border-radius: 4px 4px 0px 0px !important; + }` +); +document.adoptedStyleSheets = [subtoolbarCss]; opacities = opacities.map((o) => { (isNaN(o) || o > 100) ? o = 100 : o; From 90bd363d1efd9e5aa1f3125486469d95bcff24dc Mon Sep 17 00:00:00 2001 From: themacboy Date: Tue, 6 Dec 2022 08:48:47 +0100 Subject: [PATCH 71/73] run build --- dist/leaflet.distortableimage.js | 8305 +------------------------- dist/leaflet.distortableimage.js.map | 2 +- 2 files changed, 2 insertions(+), 8305 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 3e2317d62..4734fefd3 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,8305 +1,2 @@ -/******/ (function() { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "./node_modules/ansi-html-community/index.js": -/*!***************************************************!*\ - !*** ./node_modules/ansi-html-community/index.js ***! - \***************************************************/ -/***/ (function(module) { - -"use strict"; - - -module.exports = ansiHTML - -// Reference to https://github.com/sindresorhus/ansi-regex -var _regANSI = /(?:(?:\u001b\[)|\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\u001b[A-M]/ - -var _defColors = { - reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR] - black: '000', - red: 'ff0000', - green: '209805', - yellow: 'e8bf03', - blue: '0000ff', - magenta: 'ff00ff', - cyan: '00ffee', - lightgrey: 'f0f0f0', - darkgrey: '888' -} -var _styles = { - 30: 'black', - 31: 'red', - 32: 'green', - 33: 'yellow', - 34: 'blue', - 35: 'magenta', - 36: 'cyan', - 37: 'lightgrey' -} -var _openTags = { - '1': 'font-weight:bold', // bold - '2': 'opacity:0.5', // dim - '3': '', // italic - '4': '', // underscore - '8': 'display:none', // hidden - '9': '' // delete -} -var _closeTags = { - '23': '', // reset italic - '24': '', // reset underscore - '29': '' // reset delete -} - -;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) { - _closeTags[n] = '' -}) - -/** - * Converts text with ANSI color codes to HTML markup. - * @param {String} text - * @returns {*} - */ -function ansiHTML (text) { - // Returns the text if the string has no ANSI escape code. - if (!_regANSI.test(text)) { - return text - } - - // Cache opened sequence. - var ansiCodes = [] - // Replace with markup. - var ret = text.replace(/\033\[(\d+)m/g, function (match, seq) { - var ot = _openTags[seq] - if (ot) { - // If current sequence has been opened, close it. - if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast - ansiCodes.pop() - return '' - } - // Open tag. - ansiCodes.push(seq) - return ot[0] === '<' ? ot : '' - } - - var ct = _closeTags[seq] - if (ct) { - // Pop sequence - ansiCodes.pop() - return ct - } - return '' - }) - - // Make sure tags are closed. - var l = ansiCodes.length - ;(l > 0) && (ret += Array(l + 1).join('')) - - return ret -} - -/** - * Customize colors. - * @param {Object} colors reference to _defColors - */ -ansiHTML.setColors = function (colors) { - if (typeof colors !== 'object') { - throw new Error('`colors` parameter must be an Object.') - } - - var _finalColors = {} - for (var key in _defColors) { - var hex = colors.hasOwnProperty(key) ? colors[key] : null - if (!hex) { - _finalColors[key] = _defColors[key] - continue - } - if ('reset' === key) { - if (typeof hex === 'string') { - hex = [hex] - } - if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) { - return typeof h !== 'string' - })) { - throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000') - } - var defHexColor = _defColors[key] - if (!hex[0]) { - hex[0] = defHexColor[0] - } - if (hex.length === 1 || !hex[1]) { - hex = [hex[0]] - hex.push(defHexColor[1]) - } - - hex = hex.slice(0, 2) - } else if (typeof hex !== 'string') { - throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000') - } - _finalColors[key] = hex - } - _setTags(_finalColors) -} - -/** - * Reset colors. - */ -ansiHTML.reset = function () { - _setTags(_defColors) -} - -/** - * Expose tags, including open and close. - * @type {Object} - */ -ansiHTML.tags = {} - -if (Object.defineProperty) { - Object.defineProperty(ansiHTML.tags, 'open', { - get: function () { return _openTags } - }) - Object.defineProperty(ansiHTML.tags, 'close', { - get: function () { return _closeTags } - }) -} else { - ansiHTML.tags.open = _openTags - ansiHTML.tags.close = _closeTags -} - -function _setTags (colors) { - // reset all - _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1] - // inverse - _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0] - // dark grey - _openTags['90'] = 'color:#' + colors.darkgrey - - for (var code in _styles) { - var color = _styles[code] - var oriColor = colors[color] || '000' - _openTags[code] = 'color:#' + oriColor - code = parseInt(code) - _openTags[(code + 10).toString()] = 'background:#' + oriColor - } -} - -ansiHTML.reset() - - -/***/ }), - -/***/ "./src/DistortableCollection.js": -/*!**************************************!*\ - !*** ./src/DistortableCollection.js ***! - \**************************************/ -/***/ (function() { - -var arr = []; -L.DistortableCollection = L.FeatureGroup.extend({ - options: { - editable: true, - exportOpts: { - exportStartUrl: '//export.mapknitter.org/export', - statusUrl: '//export.mapknitter.org', - exportUrl: 'http://export.mapknitter.org/' - } - }, - initialize: function initialize(options) { - L.setOptions(this, options); - L.FeatureGroup.prototype.initialize.call(this, options); - L.Utils.initTranslation.call(this); - this.editable = this.options.editable; - }, - onAdd: function onAdd(map) { - L.FeatureGroup.prototype.onAdd.call(this, map); - this._map = map; - - if (this.editable) { - this.editing.enable(); - } - /** - * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable, - * events that need to be added on individual images are kept here to do so through `layeradd`. - */ - - - this.on('layeradd', this._addEvents, this); - this.on('layerremove', this._removeEvents, this); - }, - onRemove: function onRemove() { - if (this.editing) { - this.editing.disable(); - } - - this.off('layeradd', this._addEvents, this); - this.off('layerremove', this._removeEvents, this); - }, - _addEvents: function _addEvents(e) { - var layer = e.layer; - L.DomEvent.on(layer, { - dragstart: this._dragStartMultiple, - drag: this._dragMultiple - }, this); - L.DomEvent.on(layer.getElement(), { - mousedown: this._deselectOthers, - - /* Enable longpress for multi select for touch devices. */ - contextmenu: this._longPressMultiSelect - }, this); - }, - _removeEvents: function _removeEvents(e) { - var layer = e.layer; - L.DomEvent.off(layer, { - dragstart: this._dragStartMultiple, - drag: this._dragMultiple - }, this); - L.DomEvent.off(layer.getElement(), { - mousedown: this._deselectOthers, - contextmenu: this._longPressMultiSelect - }, this); - }, - _longPressMultiSelect: function _longPressMultiSelect(e) { - var _this = this; - - if (!this.editable) { - return; - } - - e.preventDefault(); - this.eachLayer(function (layer) { - var edit = layer.editing; - - if (layer.getElement() === e.target && edit.enabled()) { - L.DomUtil.toggleClass(layer.getElement(), 'collected'); - - if (_this.anyCollected()) { - layer.deselect(); - - _this.editing._addToolbar(); - } else { - _this.editing._removeToolbar(); - } - } - }); - }, - isCollected: function isCollected(overlay) { - return L.DomUtil.hasClass(overlay.getElement(), 'collected'); - }, - anyCollected: function anyCollected() { - var layerArr = this.getLayers(); - return layerArr.some(this.isCollected.bind(this)); - }, - _toggleCollected: function _toggleCollected(e, layer) { - if (e.shiftKey) { - /* conditional prevents disabled images from flickering multi-select mode */ - if (layer.editing.enabled()) { - L.DomUtil.toggleClass(e.target, 'collected'); // re-order layers by _leaflet_id to match their display order in UI - // add new layer to right position and avoid repitition - - var newArr = arr.every(function (each) { - return each._leaflet_id !== layer._leaflet_id; - }); - - if (newArr) { - arr.push(layer); - } else { - arr.splice(arr.indexOf(layer), 1); - } - } - } - - if (this.anyCollected()) { - layer.deselect(); - } else { - this.editing._removeToolbar(); - } - }, - _deselectOthers: function _deselectOthers(e) { - var _this2 = this; - - if (!this.editable) { - return; - } - - this.eachLayer(function (layer) { - if (layer.getElement() !== e.target) { - layer.deselect(); - } else { - _this2._toggleCollected(e, layer); - } - }); - - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - _dragStartMultiple: function _dragStartMultiple(e) { - var overlay = e.target; - var map = this._map; - var i; - - if (!this.isCollected(overlay)) { - return; - } - - this.eachLayer(function (layer) { - layer._dragStartPoints = {}; - layer.deselect(); - - for (i = 0; i < 4; i++) { - var c = layer.getCorner(i); - layer._dragStartPoints[i] = map.latLngToLayerPoint(c); - } - }); - }, - _dragMultiple: function _dragMultiple(e) { - var overlay = e.target; - var map = this._map; - - if (!this.isCollected(overlay)) { - return; - } - - var topLeft = map.latLngToLayerPoint(overlay.getCorner(0)); - - var delta = overlay._dragStartPoints[0].subtract(topLeft); - - this._updateCollectionFromPoints(delta, overlay); - }, - _toRemove: function _toRemove() { - var _this3 = this; - - var layerArr = this.getLayers(); - return layerArr.filter(function (layer) { - var mode = layer.editing._mode; - return _this3.isCollected(layer) && mode !== 'lock'; - }); - }, - _toMove: function _toMove(overlay) { - var _this4 = this; - - var layerArr = this.getLayers(); - return layerArr.filter(function (layer) { - var mode = layer.editing._mode; - return layer !== overlay && _this4.isCollected(layer) && mode !== 'lock'; - }); - }, - _updateCollectionFromPoints: function _updateCollectionFromPoints(delta, overlay) { - var layersToMove = this._toMove(overlay); - - var p = new L.Transformation(1, -delta.x, 1, -delta.y); - var i; - layersToMove.forEach(function (layer) { - var movedPoints = {}; - - for (i = 0; i < 4; i++) { - movedPoints[i] = p.transform(layer._dragStartPoints[i]); - } - - layer.setCornersFromPoints(movedPoints); - }); - }, - _getAvgCmPerPixel: function _getAvgCmPerPixel(imgs) { - var reduce = imgs.reduce(function (sum, img) { - return sum + img.cm_per_pixel; - }, 0); - return reduce / imgs.length; - }, - generateExportJson: function generateExportJson() { - var json = {}; - json.images = []; - this.eachLayer(function (layer) { - - if (this.isCollected(layer)) { - var sections = layer._image.src.split('/'); - - var filename = sections[sections.length - 1]; - var zc = layer.getCorners(); - var corners = [{ - lat: zc[0].lat, - lon: zc[0].lng - }, { - lat: zc[1].lat, - lon: zc[1].lng - }, { - lat: zc[3].lat, - lon: zc[3].lng - }, { - lat: zc[2].lat, - lon: zc[2].lng - }]; - json.images.push({ - id: layer._leaflet_id, - src: layer._image.src, - width: layer._image.width, - height: layer._image.height, - image_file_name: filename, - nodes: corners, - cm_per_pixel: L.ImageUtil.getCmPerPixel(layer) - }); - } - }, this); - json.images = json.images.reverse(); - json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images); - return json; - } -}); - -L.distortableCollection = function (id, options) { - return new L.DistortableCollection(id, options); -}; - -/***/ }), - -/***/ "./src/DistortableImageOverlay.js": -/*!****************************************!*\ - !*** ./src/DistortableImageOverlay.js ***! - \****************************************/ -/***/ (function() { - -L.DistortableImageOverlay = L.ImageOverlay.extend({ - options: { - height: 200, - crossOrigin: true, - // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding) - edgeMinWidth: 50, - editable: true, - mode: 'distort', - selected: false - }, - initialize: function initialize(url, options) { - L.setOptions(this, options); - L.Utils.initTranslation.call(this); - this.edgeMinWidth = this.options.edgeMinWidth; - this.editable = this.options.editable; - this._selected = this.options.selected; - this._url = url; - this.rotation = {}; - }, - onAdd: function onAdd(map) { - var _this = this; - - this._map = map; - - if (!this.getElement()) { - this._initImage(); - } - - map.on('viewreset', this._reset, this); - - if (this.options.corners) { - this._corners = this.options.corners; - - if (map.options.zoomAnimation && L.Browser.any3d) { - map.on('zoomanim', this._animateZoom, this); - } - } // Have to wait for the image to load because need to access its w/h - - - L.DomEvent.on(this.getElement(), 'load', function () { - _this.getPane().appendChild(_this.getElement()); - - _this._initImageDimensions(); - - if (_this.options.rotation) { - var units = _this.options.rotation.deg >= 0 ? 'deg' : 'rad'; - - _this.setAngle(_this.options.rotation[units], units); - } else { - _this.rotation = { - deg: 0, - rad: 0 - }; - - _this._reset(); - } - /* Initialize default corners if not already set */ - - - if (!_this._corners) { - if (map.options.zoomAnimation && L.Browser.any3d) { - map.on('zoomanim', _this._animateZoom, _this); - } - } - /** if there is a featureGroup, only its editable option matters */ - - - var eventParents = _this._eventParents; - - if (eventParents) { - _this.eP = eventParents[Object.keys(eventParents)[0]]; - - if (_this.eP.editable) { - _this.editing.enable(); - } - } else { - if (_this.editable) { - _this.editing.enable(); - } - - _this.eP = null; - } - }); - L.DomEvent.on(this.getElement(), 'click', this.select, this); - L.DomEvent.on(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick - }, this); - /** - * custom events fired from DoubleClickLabels.js. Used to differentiate - * single / dblclick to not deselect images on map dblclick. - */ - - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.on(map, 'click', this.deselect, this); - } - - this.fire('add'); - }, - onRemove: function onRemove(map) { - L.DomEvent.off(this.getElement(), 'click', this.select, this); - L.DomEvent.off(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick - }, this); - L.DomEvent.off(map, 'click', this.deselect, this); - - if (this.editing) { - this.editing.disable(); - } - - this.fire('remove'); - L.ImageOverlay.prototype.onRemove.call(this, map); - }, - _initImageDimensions: function _initImageDimensions() { - var map = this._map; - var originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width'); - var originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height'); - var aspectRatio = parseInt(originalImageWidth) / parseInt(originalImageHeight); - var imageHeight = this.options.height; - var imageWidth = parseInt(aspectRatio * imageHeight); - var center = map.project(map.getCenter()); - var offset = L.point(imageWidth, imageHeight).divideBy(2); - - if (this.options.corners) { - this._corners = this.options.corners; - } else { - this._corners = [map.unproject(center.subtract(offset)), map.unproject(center.add(L.point(offset.x, -offset.y))), map.unproject(center.add(L.point(-offset.x, offset.y))), map.unproject(center.add(offset))]; - } - - this._initialDimensions = { - 'center': center, - 'offset': offset, - 'zoom': map.getZoom() - }; - this.setBounds(L.latLngBounds(this.getCorners())); - }, - _singleClick: function _singleClick(e) { - if (e.type === 'singleclick') { - this.deselect(); - } else { - return; - } - }, - _singleClickListeners: function _singleClickListeners() { - var map = this._map; - L.DomEvent.off(map, 'click', this.deselect, this); - L.DomEvent.on(map, 'singleclick', this.deselect, this); - }, - _resetClickListeners: function _resetClickListeners() { - var map = this._map; - L.DomEvent.on(map, 'click', this.deselect, this); - L.DomEvent.off(map, 'singleclick', this.deselect, this); - }, - isSelected: function isSelected() { - return this._selected; - }, - deselect: function deselect() { - var edit = this.editing; - - if (!edit.enabled()) { - return; - } - - edit._removeToolbar(); - - edit._hideMarkers(); - - this._selected = false; - this.fire('deselect'); - return this; - }, - select: function select(e) { - var edit = this.editing; - var eP = this.eP; - - if (!edit.enabled()) { - return; - } - - if (e) { - L.DomEvent.stopPropagation(e); - } // this ensures deselection of all other images, allowing us to keep collection group optional - - - this._programmaticGrouping(); - - this._selected = true; - - edit._addToolbar(); - - edit._showMarkers(); - - this.fire('select'); // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it - - if (eP && eP.anyCollected()) { - this.deselect(); - return; - } - - return this; - }, - _programmaticGrouping: function _programmaticGrouping() { - this._map.eachLayer(function (layer) { - if (layer instanceof L.DistortableImageOverlay) { - layer.deselect(); - } - }); - }, - setCorner: function setCorner(corner, latlng) { - var edit = this.editing; - this._corners[corner] = latlng; - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - - this.edited = true; - return this; - }, - _cornerExceedsMapLats: function _cornerExceedsMapLats(zoom, corner, map) { - if (map.options.crs.Simple == L.CRS.Simple) { - return false; - } else { - var exceedsTop; - var exceedsBottom; - - if (zoom === 0) { - exceedsTop = map.project(corner).y < 2; - exceedsBottom = map.project(corner).y >= 255; - } else { - exceedsTop = map.project(corner).y / zoom < 2; - exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255; - } - - return exceedsTop || exceedsBottom; - } - }, - setCorners: function setCorners(latlngObj) { - var map = this._map; - var zoom = map.getZoom(); - var edit = this.editing; - var i = 0; // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402 - - for (var k in latlngObj) { - if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) { - // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - return; - } - } - - for (var _k in latlngObj) { - this._corners[i] = latlngObj[_k]; - i += 1; - } - - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - - this.edited = true; - return this; - }, - setCornersFromPoints: function setCornersFromPoints(pointsObj) { - var map = this._map; - var zoom = map.getZoom(); - var edit = this.editing; - var i = 0; - - for (var k in pointsObj) { - var corner = map.layerPointToLatLng(pointsObj[k]); - - if (this._cornerExceedsMapLats(zoom, corner, map)) { - // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - return; - } - } - - for (var _k2 in pointsObj) { - this._corners[i] = map.layerPointToLatLng(pointsObj[_k2]); - i += 1; - } - - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - - this.edited = true; - return this; - }, - scaleBy: function scaleBy(scale) { - var map = this._map; - var center = map.project(this.getCenter()); - var i; - var p; - var scaledCorners = {}; - - if (scale === 0) { - return; - } - - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(center).multiplyBy(scale).add(center); - scaledCorners[i] = map.unproject(p); - } - - this.setCorners(scaledCorners); - return this; - }, - getAngle: function getAngle() { - var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'deg'; - var matrix = this.getElement().style[L.DomUtil.TRANSFORM].split('matrix3d')[1].slice(1, -1).split(','); - var row0x = matrix[0]; - var row0y = matrix[1]; - var row1x = matrix[4]; - var row1y = matrix[5]; - var determinant = row0x * row1y - row0y * row1x; - var angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad'); - - if (determinant < 0) { - angle += angle < 0 ? Math.PI : -Math.PI; - } - - if (angle < 0) { - angle = 2 * Math.PI + angle; - } - - return unit === 'deg' ? Math.round(L.TrigUtil.radiansToDegrees(angle)) : L.Util.formatNum(angle, 2); - }, - setAngle: function setAngle(angle) { - var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'deg'; - var currentAngle = this.getAngle(unit); - var angleToRotateBy = angle - currentAngle; - this.rotateBy(angleToRotateBy, unit); - return this; - }, - rotateBy: function rotateBy(angle) { - var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'deg'; - var map = this._map; - var center = map.project(this.getCenter()); - var corners = {}; - var i; - var p; - var q; - - if (unit === 'deg') { - angle = L.TrigUtil.degreesToRadians(angle); - } - - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(center); - q = L.point(Math.cos(angle) * p.x - Math.sin(angle) * p.y, Math.sin(angle) * p.x + Math.cos(angle) * p.y); - corners[i] = map.unproject(q.add(center)); - } - - this.setCorners(corners); - return this; - }, - dragBy: function dragBy(formerPoint, newPoint) { - var map = this._map; - var i; - var p; - var transCorners = {}; - var delta = map.project(formerPoint).subtract(map.project(newPoint)); - - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(delta); - transCorners[i] = map.unproject(p); - } - - this.setCorners(transCorners); - }, - restore: function restore() { - var map = this._map; - var center = this._initialDimensions.center; - var offset = this._initialDimensions.offset; - var zoom = this._initialDimensions.zoom; - var corners = [center.subtract(offset), center.add(L.point(offset.x, -offset.y)), center.add(L.point(-offset.x, offset.y)), center.add(offset)]; - - for (var i = 0; i < 4; i++) { - if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) { - this.setCorner(i, map.unproject(corners[i], zoom)); - } - } - - this.edited = false; - this.fire('restore'); - return this; - }, - - /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */ - - /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */ - _getTranslateString: function _getTranslateString(point) { - // on WebKit browsers (Chrome/Safari/iOS Safari/Android) - // using translate3d instead of translate - // makes animation smoother as it ensures HW accel is used. - // Firefox 13 doesn't care - // (same speed either way), Opera 12 doesn't support translate3d - var is3d = L.Browser.webkit3d; - var open = 'translate' + (is3d ? '3d' : '') + '('; - var close = (is3d ? ',0' : '') + ')'; - return open + point.x + 'px,' + point.y + 'px' + close; - }, - _reset: function _reset() { - var map = this._map; - var image = this.getElement(); - var latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map); - - var transformMatrix = this._calculateProjectiveTransform(latLngToLayerPoint); - - var topLeft = latLngToLayerPoint(this.getCorner(0)); - var warp = L.DomUtil.getMatrixString(transformMatrix); - - var translation = this._getTranslateString(topLeft); - /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ - - - image._leaflet_pos = topLeft; - image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); - /* Set origin to the upper-left corner rather than - * the center of the image, which is the default. - */ - - image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0'; - this.rotation.deg = this.getAngle(); - this.rotation.rad = this.getAngle('rad'); - }, - - /* - * Calculates the transform string that will be - * correct *at the end* of zooming. - * Leaflet then generates a CSS3 animation between the current transform and - * future transform which makes the transition appear smooth. - */ - _animateZoom: function _animateZoom(event) { - var map = this._map; - var image = this.getElement(); - - var latLngToNewLayerPoint = function latLngToNewLayerPoint(latlng) { - return map._latLngToNewLayerPoint(latlng, event.zoom, event.center); - }; - - var transformMatrix = this._calculateProjectiveTransform(latLngToNewLayerPoint); - - var topLeft = latLngToNewLayerPoint(this.getCorner(0)); - var warp = L.DomUtil.getMatrixString(transformMatrix); - - var translation = this._getTranslateString(topLeft); - /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ - - - image._leaflet_pos = topLeft; - image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); - }, - getCorners: function getCorners() { - return this._corners; - }, - getCorner: function getCorner(i) { - return this._corners[i]; - }, - // image (vertex) centroid calculation - getCenter: function getCenter() { - var map = this._map; - var reduce = this.getCorners().reduce(function (agg, corner) { - return agg.add(map.project(corner)); - }, L.point(0, 0)); - return map.unproject(reduce.divideBy(4)); - }, - _calculateProjectiveTransform: function _calculateProjectiveTransform(latLngToCartesian) { - /* Setting reasonable but made-up image defaults - * allow us to place images on the map before - * they've finished downloading. */ - var offset = latLngToCartesian(this.getCorner(0)); - var w = this.getElement().offsetWidth || 500; - var h = this.getElement().offsetHeight || 375; - var c = []; - var j; - /* Convert corners to container points (i.e. cartesian coordinates). */ - - for (j = 0; j < 4; j++) { - c.push(latLngToCartesian(this.getCorner(j))._subtract(offset)); - } - /* - * This matrix describes the action of - * the CSS transform on each corner of the image. - * It maps from the coordinate system centered - * at the upper left corner of the image - * to the region bounded by the latlngs in this._corners. - * For example: - * 0, 0, c[0].x, c[0].y - * says that the upper-left corner of the image - * maps to the first latlng in this._corners. - */ - - - return L.MatrixUtil.general2DProjection(0, 0, c[0].x, c[0].y, w, 0, c[1].x, c[1].y, 0, h, c[2].x, c[2].y, w, h, c[3].x, c[3].y); - } -}); - -L.distortableImageOverlay = function (id, options) { - return new L.DistortableImageOverlay(id, options); -}; - -L.Map.addInitHook(function () { - if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) { - L.DomUtil.addClass(this.getContainer(), 'ldi'); - } -}); - -/***/ }), - -/***/ "./src/components/DistortableImage.Keymapper.js": -/*!******************************************************!*\ - !*** ./src/components/DistortableImage.Keymapper.js ***! - \******************************************************/ -/***/ (function() { - -var _this = this; - -L.DomUtil = L.DomUtil || {}; -L.DistortableImage = L.DistortableImage || {}; -L.distortableImage = L.DistortableImage; -L.DistortableImage.Keymapper = L.Handler.extend({ - options: { - position: 'topright' - }, - initialize: function initialize(map, options) { - this._map = map; - L.setOptions(this, options); - }, - addHooks: function addHooks() { - if (!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 removeHooks() { - if (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 = false; - } - }, - _buildContainer: function _buildContainer() { - var container = L.DomUtil.create('div', 'ldi-keymapper-hide'); - container.setAttribute('id', 'ldi-keymapper'); - var divider = L.DomUtil.create('br', 'divider'); - container.appendChild(divider); - return container; - }, - _createButton: function _createButton() { - var toggler = L.DomUtil.create('a', ''); - toggler.innerHTML = L.IconUtil.create('keyboard_open'); - toggler.setAttribute('id', 'toggle-keymapper'); - toggler.setAttribute('href', '#'); - toggler.setAttribute('title', 'Show keymap'); // Will force screen readers like VoiceOver to read this as "Show keymap - button" - - toggler.setAttribute('role', 'button'); - toggler.setAttribute('aria-label', 'Show keymap'); - return toggler; - }, - _wrap: function _wrap() { - var wrap = L.DomUtil.create('div', ''); - wrap.setAttribute('id', 'keymapper-wrapper'); - wrap.style.display = 'none'; - return wrap; - }, - _setMapper: function _setMapper(container, wrap, button) { - this._keymapper = L.control({ - position: this.options.position - }); - - this._keymapper.onAdd = function () { - container.appendChild(wrap); - wrap.insertAdjacentHTML('beforeend', '' + '
    ' + - /* eslint-disable */ - '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
    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
    '); - /* eslint-enable */ - - container.appendChild(button); - return container; - }; - - this._keymapper.addTo(this._map); - }, - _toggleKeymapper: function _toggleKeymapper(e) { - e.preventDefault(); - this._container.className = this._container.className === 'ldi-keymapper leaflet-control' ? 'ldi-keymapper-hide leaflet-control' : 'ldi-keymapper leaflet-control'; - this._scrollWrapper.style.display = this._scrollWrapper.style.display === 'none' ? 'block' : 'none'; - this._toggler.innerHTML = this._toggler.innerHTML === 'close' ? L.IconUtil.create('keyboard_open') : 'close'; - L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap'); - L.DomUtil.toggleClass(this._toggler, 'close-icon'); - }, - _injectIconSet: function _injectIconSet() { - if (document.querySelector('#keymapper-iconset')) { - return; - } - - var el = L.DomUtil.create('div', ''); - el.id = 'keymapper-iconset'; - el.setAttribute('hidden', 'hidden'); - this._iconset = new L.KeymapperIconSet().render(); - el.innerHTML = this._iconset; - document.querySelector('.leaflet-control-container').appendChild(el); - } -}); -L.DistortableImage.Keymapper.addInitHook(function () { - L.DistortableImage.Keymapper.prototype._n = L.DistortableImage.Keymapper.prototype._n ? L.DistortableImage.Keymapper.prototype._n + 1 : 1; // dont enable keymapper for mobile - - if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) { - _this.enable(); - - _this._injectIconSet(); - } -}); - -L.distortableImage.keymapper = function (map, options) { - return new L.DistortableImage.Keymapper(map, options); -}; - -/***/ }), - -/***/ "./src/edit/DistortableCollection.Edit.js": -/*!************************************************!*\ - !*** ./src/edit/DistortableCollection.Edit.js ***! - \************************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; // this class holds the keybindings and toolbar API for an image collection instance - -L.DistortableCollection.Edit = L.Handler.extend({ - options: { - keymap: L.distortableImage.group_action_map - }, - initialize: function initialize(group, options) { - this._group = group; - this._exportOpts = group.options.exportOpts; - L.setOptions(this, options); - L.distortableImage.group_action_map.Escape = '_decollectAll'; - }, - addHooks: function addHooks() { - var group = this._group; - var map = 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); - - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.on(map, 'click', this._decollectAll, this); - } - - L.DomEvent.on(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick, - boxcollectend: this._addCollections - }, this); - this._group.editable = true; - - this._group.eachLayer(function (layer) { - return layer.editing.enable(); - }); - }, - removeHooks: function removeHooks() { - var group = this._group; - var map = group._map; - L.DomEvent.off(document, 'keydown', this._onKeyDown, this); - - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.off(map, 'click', this._decollectAll, this); - } - - L.DomEvent.off(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick, - boxcollectend: this._addCollections - }, this); - - this._decollectAll(); - - this._group.editable = false; - - this._group.eachLayer(function (layer) { - return layer.editing.disable(); - }); - }, - enable: function enable() { - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - this._enabled = false; - this.removeHooks(); - return this; - }, - _onKeyDown: function _onKeyDown(e) { - var keymap = this.options.keymap; - var handlerName = keymap[e.key]; - - if (!this[handlerName]) { - return; - } - - if (this._group.anyCollected()) { - this[handlerName].call(this); - } - }, - _singleClick: function _singleClick(e) { - if (e.type === 'singleclick') { - this._decollectAll(e); - } else { - return; - } - }, - _singleClickListeners: function _singleClickListeners() { - var map = this._group._map; - L.DomEvent.off(map, 'click', this._decollectAll, this); - L.DomEvent.on(map, 'singleclick', this._decollectAll, this); - }, - _resetClickListeners: function _resetClickListeners() { - var map = this._group._map; - L.DomEvent.on(map, 'click', this._decollectAll, this); - L.DomEvent.off(map, 'singleclick', this._decollectAll, this); - }, - _decollectAll: function _decollectAll(e) { - var oe; - - if (e) { - oe = e.originalEvent; - } - /** - * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete - * also prevents deselection following a click on a disabled img by differentiating it from the map - */ - - - if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) { - return; - } - - this._group.eachLayer(function (layer) { - L.DomUtil.removeClass(layer.getElement(), 'collected'); - layer.deselect(); - }); - - this._removeToolbar(); - - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - _unlockGroup: function _unlockGroup() { - var _this = this; - - if (!this.hasTool(L.UnlockAction)) { - return; - } - - this._group.eachLayer(function (layer) { - if (_this._group.isCollected(layer)) { - var edit = layer.editing; - - edit._unlock(); // unlock updates the layer's handles; deselect to ensure they're hidden - - - layer.deselect(); - } - }); - }, - _lockGroup: function _lockGroup() { - var _this2 = this; - - if (!this.hasTool(L.LockAction)) { - return; - } - - this._group.eachLayer(function (layer) { - if (_this2._group.isCollected(layer)) { - var edit = layer.editing; - - edit._lock(); // map.addLayer also deselects the image, so we reselect here - - - L.DomUtil.addClass(layer.getElement(), 'collected'); - } - }); - }, - _addCollections: function _addCollections(e) { - var _this3 = this; - - var box = e.boxCollectBounds; - var map = this._group._map; - - this._group.eachLayer(function (layer) { - var edit = layer.editing; - - if (layer.isSelected()) { - layer.deselect(); - } - - var zoom = map.getZoom(); - var center = map.getCenter(); - var imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1)); - imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center); - - if (box.intersects(imgBounds) && edit.enabled()) { - if (!_this3.toolbar) { - _this3._addToolbar(); - } - - L.DomUtil.addClass(layer.getElement(), 'collected'); - } - }); - }, - _removeGroup: function _removeGroup(e) { - var _this4 = this; - - if (!this.hasTool(L.DeleteAction)) { - return; - } - - var layersToRemove = this._group._toRemove(); - - var n = layersToRemove.length; - - if (n === 0) { - return; - } - - var choice = L.DomUtil.confirmDeletes(n); - - if (choice) { - layersToRemove.forEach(function (layer) { - _this4._group.removeLayer(layer); - }); - - if (!this._group.anyCollected()) { - this._removeToolbar(); - } - } - - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - cancelExport: function cancelExport() { - if (!this.customCollection) { - this._exportOpts.collection = undefined; - } - - clearInterval(this.updateInterval); - }, - _addToolbar: function _addToolbar() { - var group = this._group; - var map = group._map; - - if (group.options.suppressToolbar || this.toolbar) { - return; - } - - this.toolbar = L.distortableImage.controlBar({ - actions: this.editActions, - position: 'topleft' - }).addTo(map, group); - }, - _removeToolbar: function _removeToolbar() { - var map = this._group._map; - - if (this.toolbar) { - map.removeLayer(this.toolbar); - this.toolbar = false; - } else { - return false; - } - }, - hasTool: function hasTool(value) { - return this.editActions.some(function (action) { - return action === value; - }); - }, - addTool: function addTool(value) { - if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { - this._removeToolbar(); - - this.editActions.push(value); - - this._addToolbar(); - } - - return this; - }, - removeTool: function removeTool(value) { - var _this5 = this; - - this.editActions.some(function (item, idx) { - if (_this5.editActions[idx] === value) { - _this5._removeToolbar(); - - _this5.editActions.splice(idx, 1); - - _this5._addToolbar(); - - return true; - } else { - return false; - } - }); - return this; - }, - startExport: function startExport() { - var _this6 = this; - - if (!this.hasTool(L.ExportAction)) { - return; - } - - return new Promise(function (resolve) { - var opts = _this6._exportOpts; - opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion - - var statusUrl; - _this6.updateInterval = null; // this may be overridden to update the UI to show export progress or completion - - var _defaultUpdater = function _defaultUpdater(data) { - data = JSON.parse(data); // optimization: fetch status directly from google storage: - - if (data.status_url) { - if (statusUrl !== data.status_url && data.status_url.match('.json')) { - // if (data.status_url && data.status_url.substr(0,1) === "/") { - // opts.statusUrl = opts.statusUrl + data.status_url; - // } else { - statusUrl = data.status_url; // } - } - - if (data.status === 'complete') { - clearInterval(_this6.updateInterval); - - if (!_this6.customCollection) { - _this6._exportOpts.collection = undefined; - } - - resolve(); - - if (data.jpg !== null) { - alert('Export succeeded. ' + opts.exportUrl + data.jpg); - } - } // TODO: update to clearInterval when status == "failed" if we update that in this file: - // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb - - - console.log(data); - } - }; // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json; - // this may be overridden to integrate with any UI - - - var _defaultHandleStatusRes = function _defaultHandleStatusRes(data) { - statusUrl = opts.statusUrl + data; // repeatedly fetch the status.json - - _this6.updateInterval = setInterval(function () { - var reqOpts = { - method: 'GET' - }; - var req = new Request("".concat(statusUrl, "?").concat(Date.now()), reqOpts); - fetch(req).then(function (res) { - if (res.ok) { - return res.text(); - } - }).then(opts.updater); - }, opts.frequency); - }; // initiate the export - - - var _defaultFetchStatusUrl = function _defaultFetchStatusUrl(mergedOpts) { - var form = new FormData(); - form.append('collection', JSON.stringify(mergedOpts.collection)); - form.append('scale', mergedOpts.scale); - form.append('upload', true); - var reqOpts = { - method: 'POST', - body: form - }; - var req = new Request(mergedOpts.exportStartUrl, reqOpts); - fetch(req).then(function (res) { - if (res.ok) { - return res.text(); - } - }).then(mergedOpts.handleStatusRes); - }; // If the user has passed collection property - - - _this6.customCollection = !!opts.collection; - - if (!_this6.customCollection) { - opts.collection = _this6._group.generateExportJson().images; - } - - opts.frequency = opts.frequency || 3000; - opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel ! - - opts.updater = opts.updater || _defaultUpdater; - opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes; - opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl; - opts.fetchStatusUrl(opts); - }); - } -}); - -L.distortableCollection.edit = function (group, options) { - return new L.DistortableCollection.Edit(group, options); -}; - -/***/ }), - -/***/ "./src/edit/DistortableImage.Edit.js": -/*!*******************************************!*\ - !*** ./src/edit/DistortableImage.Edit.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; // holds the keybindings & toolbar API for an individual image instance - -L.DistortableImage.Edit = L.Handler.extend({ - options: { - opacity: 0.7, - outline: '1px solid red', - keymap: L.distortableImage.action_map - }, - initialize: function initialize(overlay, options) { - this._overlay = overlay; - this._toggledImage = false; - this._mode = overlay.options.mode; - this._transparent = false; - this._outlined = false; - L.setOptions(this, options); - L.distortableImage.action_map.Escape = '_deselect'; - }, - - /* Run on image selection. */ - addHooks: function addHooks() { - var overlay = this._overlay; - this.editActions = this.options.actions; - /* bring the selected image into view */ - - overlay.bringToFront(); - - this._initModes(); - - this._initHandles(); - - this._appendHandlesandDragable(); - - if (overlay.isSelected() && !overlay.options.suppressToolbar) { - this._addToolbar(); - } - - this.parentGroup = overlay.eP ? overlay.eP : false; - L.DomEvent.on(overlay.getElement(), { - dblclick: this.nextMode - }, this); - L.DomEvent.on(window, 'keydown', this._onKeyDown, this); - }, - - /* Run on image deselection. */ - removeHooks: function removeHooks() { - var overlay = this._overlay; - var eP = this.parentGroup; // First, check if dragging exists - it may be off due to locking - - this._disableDragging(); - - if (this.toolbar) { - this._removeToolbar(); - } - - for (var handle in this._handles) { - L.DomUtil.remove(handle); - } - /** - * ensures if you disable an image while it is multi-selected - * additional deselection logic is run - */ - - - if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) { - L.DomUtil.removeClass(overlay.getElement(), 'collected'); - } - - if (eP && !eP.anyCollected() && eP.editing.toolbar) { - eP.editing._removeToolbar(); - } - - L.DomEvent.off(overlay.getElement(), { - dblclick: this.nextMode - }, this); - L.DomEvent.off(window, 'keydown', this._onKeyDown, this); - }, - disable: function disable() { - if (!this._enabled) { - return this; - } - - this._overlay.deselect(); - - this._enabled = false; - this.removeHooks(); - return this; - }, - _initModes: function _initModes() { - this._modes = {}; // passed from L.DistortablImage.PopupBar. If the mode is one - // of the current toolbar actions, adds it to this._modes - - for (var mode in L.DistortableImage.Edit.MODES) { - var action = L.DistortableImage.Edit.MODES[mode]; - - if (this.editActions.indexOf(action) !== -1) { - this._modes[mode] = action; - } - } // sets the current mode to the 1st available one if the one selected - // during initialization is not available - - - if (!this._modes[this._mode]) { - this._mode = Object.keys(this._modes)[0]; - } - }, - _initHandles: function _initHandles() { - var overlay = this._overlay; - var i; - this._dragHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._dragHandles.addLayer(L.dragHandle(overlay, i)); - } - - this._scaleHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._scaleHandles.addLayer(L.scaleHandle(overlay, i)); - } - - this._distortHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._distortHandles.addLayer(L.distortHandle(overlay, i)); - } - - this._rotateHandles = L.layerGroup(); // individual rotate - - for (i = 0; i < 4; i++) { - this._rotateHandles.addLayer(L.rotateHandle(overlay, i)); - } // handle includes rotate AND scale - - - this._freeRotateHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i)); - } - - this._lockHandles = L.layerGroup(); - - for (i = 0; i < 4; i++) { - this._lockHandles.addLayer(L.lockHandle(overlay, i, { - draggable: false - })); - } - - this._handles = { - drag: this._dragHandles, - scale: this._scaleHandles, - distort: this._distortHandles, - rotate: this._rotateHandles, - freeRotate: this._freeRotateHandles, - lock: this._lockHandles - }; - }, - _appendHandlesandDragable: function _appendHandlesandDragable() { - var ov = this._overlay; // won't throw error if user adds 0 mode actions to toolbar - - if (!this._mode) { - this._enableDragging(); - - return; - } - - this._updateHandle(); - - if (!ov.isSelected() && this.currentHandle) { - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(0); - - if (handle.dragging) { - handle.dragging.disable(); - } - }); - } - - if (!this.isMode('lock')) { - this._enableDragging(); - } - }, - _onKeyDown: function _onKeyDown(e) { - var keymap = this.options.keymap; - var handlerName = keymap[e.key]; - var ov = this._overlay; - var eP = this.parentGroup; - - if (eP && eP.anyCollected()) { - return; - } - - if (this[handlerName] !== undefined && !ov.options.suppressToolbar) { - if (ov.isSelected() && this.toolbar) { - this[handlerName].call(this); - } - } - }, - replaceTool: function replaceTool(old, next) { - var _this = this; - - if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) { - return this; - } - - this.editActions.some(function (item, idx) { - if (item === old) { - _this._removeToolbar(); - - _this.editActions[idx] = next; - - _this._addToolbar(); - - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === old) { - delete _this._modes[mode]; - - _this._nextOrNone(mode); - } else if (L.DistortableImage.Edit.MODES[mode] === next) { - _this._modes[mode] = next; - } - } - - return true; - } - }); - return this; - }, - addTool: function addTool(value) { - if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { - this._removeToolbar(); - - this.editActions.push(value); - - this._addToolbar(); - - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === value) { - this._modes[mode] = value; - } - } - - if (!this._overlay.isSelected()) { - this._removeToolbar(); - } - } - - return this; - }, - hasTool: function hasTool(value) { - return this.editActions.some(function (action) { - return action === value; - }); - }, - removeTool: function removeTool(value) { - var _this2 = this; - - this.editActions.some(function (item, idx) { - if (item === value) { - _this2._removeToolbar(); - - _this2.editActions.splice(idx, 1); - - _this2._addToolbar(); - - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === value) { - delete _this2._modes[mode]; - - _this2._nextOrNone(mode); - } - } - - return true; - } - }); - - if (!this._overlay.isSelected()) { - this._removeToolbar(); - } - - return this; - }, - // set the mode to the next mode or if that was the last one set mode to '' - _nextOrNone: function _nextOrNone(mode) { - if (this.isMode(mode)) { - if (Object.keys(this.getModes()).length >= 1) { - this.nextMode(); - } else { - if (mode === 'lock') { - this._enableDragging(); - } - - this._mode = ''; - - this._updateHandle(); - } - } - }, - _removeToolbar: function _removeToolbar() { - var ov = this._overlay; - var map = ov._map; - - if (this.toolbar) { - map.removeLayer(this.toolbar); - this.toolbar = false; - } - }, - _enableDragging: function _enableDragging() { - var _this3 = this; - - var overlay = this._overlay; - var map = overlay._map; - this.dragging = new L.Draggable(overlay.getElement()); - this.dragging.enable(); - /* Hide toolbars and markers while dragging; click will re-show it */ - - this.dragging.on('dragstart', function () { - overlay.fire('dragstart'); - - _this3._removeToolbar(); - }); - /* - * Adjust default behavior of L.Draggable, which overwrites the CSS3 - * distort transformations that we set when it calls L.DomUtil.setPosition. - */ - - this.dragging._updatePosition = function () { - var topLeft = overlay.getCorner(0); - - var delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft)); - - var currentPoint; - var corners = {}; - var i; - this.fire('predrag'); - - for (i = 0; i < 4; i++) { - currentPoint = map.latLngToLayerPoint(overlay.getCorner(i)); - corners[i] = map.layerPointToLatLng(currentPoint.add(delta)); - } - - overlay.setCorners(corners); - overlay.fire('drag'); - this.fire('drag'); - }; - - this.dragging.on('dragend', function () { - overlay.fire('dragend'); - }); - }, - _disableDragging: function _disableDragging() { - if (this.dragging) { - this.dragging.disable(); - delete this.dragging; - } - }, - _dragMode: function _dragMode() { - this.setMode('drag'); - }, - _scaleMode: function _scaleMode() { - this.setMode('scale'); - }, - _distortMode: function _distortMode() { - this.setMode('distort'); - }, - _rotateMode: function _rotateMode() { - this.setMode('rotate'); - }, - _freeRotateMode: function _freeRotateMode() { - this.setMode('freeRotate'); - }, - _toggleLockMode: function _toggleLockMode() { - if (this.isMode('lock')) { - this._unlock(); - } else { - this._lock(); - } - }, - _toggleOpacity: function _toggleOpacity() { - var image = this._overlay.getElement(); - - var opacity; - - if (!this.hasTool(L.OpacityAction)) { - return; - } - - this._transparent = !this._transparent; - opacity = this._transparent ? this.options.opacity : 1; - L.DomUtil.setOpacity(image, opacity); - image.setAttribute('opacity', opacity); - - this._refresh(); - }, - _toggleBorder: function _toggleBorder() { - var image = this._overlay.getElement(); - - var outline; - - if (!this.hasTool(L.BorderAction)) { - return; - } - - this._outlined = !this._outlined; - outline = this._outlined ? this.options.outline : 'none'; - image.style.outline = outline; - - this._refresh(); - }, - // compare this to using overlay zIndex - _toggleOrder: function _toggleOrder() { - if (this._toggledImage) { - this._stackUp(); - } else { - this._stackDown(); - } - }, - _removeOverlay: function _removeOverlay() { - var ov = this._overlay; - var eP = this.parentGroup; - - if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { - return; - } - - var choice = L.DomUtil.confirmDelete(); - - if (!choice) { - return; - } - - this._removeToolbar(); - - if (eP) { - eP.removeLayer(ov); - } else { - ov._map.removeLayer(ov); - } - }, - // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82 - _getExport: function _getExport() { - var overlay = this._overlay; - var map = overlay._map; - var img = overlay.getElement(); - - if (!this.hasTool(L.ExportAction)) { - return; - } // make a new image - - - var downloadable = new Image(); - downloadable.id = downloadable.id || 'tempId12345'; - document.body.appendChild(downloadable); - - downloadable.onload = function onLoadDownloadableImage() { - var height = downloadable.height; - var width = downloadable.width; - var nw = map.latLngToLayerPoint(overlay.getCorner(0)); - var ne = map.latLngToLayerPoint(overlay.getCorner(1)); - var sw = map.latLngToLayerPoint(overlay.getCorner(2)); - var se = map.latLngToLayerPoint(overlay.getCorner(3)); // I think this is to move the image to the upper left corner, - // eslint-disable-next-line max-len - // jywarren: i think we may need these or the image goes off the edge of the canvas - // jywarren: but these seem to break the distortion math... - // jywarren: i think it should be rejiggered so it - // finds the most negative values of x and y and then - // adds those to all coordinates - // nw.x -= nw.x; - // ne.x -= nw.x; - // se.x -= nw.x; - // sw.x -= nw.x; - // nw.y -= nw.y; - // ne.y -= nw.y; - // se.y -= nw.y; - // sw.y -= nw.y; - // run once warping is complete - - downloadable.onload = function () { - L.DomUtil.remove(downloadable); - }; - - if (window && window.hasOwnProperty('warpWebGl')) { - warpWebGl(downloadable.id, [0, 0, width, 0, width, height, 0, height], [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y], true // trigger download - ); - } - }; - - downloadable.src = overlay.options.fullResolutionSrc || img.src; - }, - _stackUp: function _stackUp() { - var t = this._toggledImage; - - if (!t || !this.hasTool(L.StackAction)) { - return; - } - - this._toggledImage = false; - - this._overlay.bringToFront(); - - this._refresh(); - }, - _stackDown: function _stackDown() { - var t = this._toggledImage; - - if (t || !this.hasTool(L.StackAction)) { - return; - } - - this._toggledImage = true; - - this._overlay.bringToBack(); - - this._refresh(); - }, - _unlock: function _unlock() { - var ov = this._overlay; - var map = ov._map; - var eP = this.parentGroup; - - if (!this.isMode('lock')) { - return; - } - - if (eP && !eP.isCollected(ov) || !eP) { - if (!this.hasTool(L.LockAction)) { - return; - } - } - - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - - if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) { - this._mode = ''; - this.currentHandle = ''; - } else { - this._mode = ov.options.mode; - } - - this._updateHandle(); - - this._enableDragging(); - - this._refresh(); - }, - _lock: function _lock() { - var ov = this._overlay; - var map = ov._map; - var eP = this.parentGroup; - - if (this.isMode('lock')) { - return; - } - - if (eP && !eP.isCollected(ov) || !eP) { - if (!this.hasTool(L.LockAction)) { - return; - } - } - - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - - this._mode = 'lock'; - - this._updateHandle(); - - this._disableDragging(); - - this._refresh(); - }, - _deselect: function _deselect() { - this._overlay.deselect(); - }, - _showMarkers: function _showMarkers(e) { - var eP = this.parentGroup; - - if (!this.currentHandle) { - return; - } // only markers we want in collect interface for now is lock - - - if (!this.isMode('lock') && eP && eP.anyCollected()) { - return; - } - - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(1); - - if (handle.dragging) { - handle.dragging.enable(); - } - - L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive'); - }); - }, - _hideMarkers: function _hideMarkers() { - var ov = this._overlay; - var eP = this.parentGroup; // workaround for race condition w/ feature group - - if (!this._handles) { - this._initHandles(); - } - - if (!this.currentHandle) { - return; - } - - if (this.isMode('lock') && eP && eP.isCollected(ov)) { - return; - } - - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(0); - - if (handle.dragging) { - handle.dragging.disable(); - } - - L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive'); - }); - }, - _updateHandle: function _updateHandle() { - var ov = this._overlay; - var map = ov._map; - var mode = this.getMode(); - - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - - this.currentHandle = mode === '' ? '' : this._handles[mode]; - - if (this.currentHandle !== '') { - map.addLayer(this.currentHandle); - } - }, - _addToolbar: function _addToolbar() { - var ov = this._overlay; - var eP = this.parentGroup; - var map = ov._map; // Find the topmost point on the image. - - var corners = ov.getCorners(); - var maxLat = -Infinity; - - if (eP && eP.anyCollected()) { - eP.editing._addToolbar(); - - return; - } - - if (ov.options.suppressToolbar || this.toolbar) { - return; - } - - for (var i = 0; i < corners.length; i++) { - if (corners[i].lat > maxLat) { - maxLat = corners[i].lat; - } - } // Longitude is based on the centroid of the image. - - - var raisedPoint = ov.getCenter(); - raisedPoint.lat = maxLat; - this.toolbar = L.distortableImage.popupBar(raisedPoint, { - actions: this.editActions - }).addTo(map, ov); - ov.fire('toolbar:created'); - }, - _refresh: function _refresh() { - if (this.toolbar) { - this._removeToolbar(); - } - - this._addToolbar(); - }, - _updateToolbarPos: function _updateToolbarPos() { - var overlay = this._overlay; // Find the topmost point on the image. - - var corners = overlay.getCorners(); - var toolbar = this.toolbar; - var maxLat = -Infinity; - - if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) { - for (var i = 0; i < corners.length; i++) { - if (corners[i].lat > maxLat) { - maxLat = corners[i].lat; - } - } // Longitude is based on the centroid of the image. - - - var raisedPoint = overlay.getCenter(); - raisedPoint.lat = maxLat; - - if (!overlay.options.suppressToolbar) { - this.toolbar.setLatLng(raisedPoint); - } - } - }, - hasMode: function hasMode(mode) { - return !!this._modes[mode]; - }, - getMode: function getMode() { - if (!this.enabled()) { - return; - } - - return this._mode; - }, - getModes: function getModes() { - return this._modes; - }, - isMode: function isMode(mode) { - if (!this.enabled()) { - return false; - } - - return this._mode === mode; - }, - setMode: function setMode(newMode) { - var ov = this._overlay; - var eP = this.parentGroup; - var mode = this.getMode(); - - if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) { - return; - } - - if (this.toolbar) { - this.toolbar.clickTool(newMode); - } - - if (this.isMode('lock') && !this.dragging) { - this._enableDragging(); - } - - this._mode = newMode; - - if (this.isMode('lock')) { - this._disableDragging(); - } - - this._updateHandle(); - - this._refresh(); - - if (eP && eP.isCollected(ov)) { - ov.deselect(); - } - - return this; - }, - - /** - * need to attach a stop to img dblclick or it will propagate to - * the map and fire the handler that shows map location labels on map dblclick. - */ - nextMode: function nextMode(e) { - var mode = this.getMode(); - var eP = this.parentGroup; - var modesArray = Object.keys(this.getModes()); - var idx = modesArray.indexOf(mode); - var nextIdx = (idx + 1) % modesArray.length; - var newMode = modesArray[nextIdx]; - - if (e) { - if (eP && eP.anyCollected()) { - return; - } - - L.DomEvent.stop(e); - } - - return this.setMode(newMode); - } -}); - -L.distortableImage.edit = function (overlay, options) { - return new L.DistortableImage.Edit(overlay, options); -}; - -/***/ }), - -/***/ "./src/edit/actions/BorderAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/BorderAction.js ***! - \******************************************/ -/***/ (function() { - -L.BorderAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var mode = edit._mode; - var use; - var tooltip; - - if (edit._outlined) { - use = 'border_outer'; - tooltip = overlay.options.translation.removeBorder; - } else { - use = 'border_clear'; - tooltip = overlay.options.translation.addBorder; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: mode === 'lock' ? 'disabled' : '' - }; // conditional for disabling keybindings for this action when the image is locked. - - L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer'); - L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border'); - - edit._toggleBorder(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DeleteAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/DeleteAction.js ***! - \******************************************/ -/***/ (function() { - -L.DeleteAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use = 'delete_forever'; - var tooltip; - /** - * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only - * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods. - */ - - if (edit instanceof L.DistortableImage.Edit) { - tooltip = overlay.options.translation.deleteImage; // backspace windows / delete mac - - L.DistortableImage.action_map.Backspace = edit._mode === 'lock' ? '' : '_removeOverlay'; - } else { - tooltip = overlay.options.translation.deleteImages; - L.DistortableImage.group_action_map.Backspace = edit._mode === 'lock' ? '' : '_removeGroup'; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - if (edit instanceof L.DistortableImage.Edit) { - edit._removeOverlay(); - } else { - edit._removeGroup(); - } - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DistortAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/DistortAction.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'distort', - tooltip: overlay.options.translation.distortImage, - className: 'distort' - }; - L.DistortableImage.action_map.d = '_distortMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._distortMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DragAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/DragAction.js ***! - \****************************************/ -/***/ (function() { - -L.DragAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'drag', - tooltip: overlay.options.translation.dragImage, - className: 'drag' - }; - L.DistortableImage.action_map.D = '_dragMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._dragMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/EditAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/EditAction.js ***! - \****************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; -L.distortableImage = L.DistortableImage; -L.DistortableImage.action_map = {}; -L.EditAction = L.Toolbar2.Action.extend({ - options: { - toolbarIcon: { - svg: false, - html: '', - className: '', - tooltip: '' - } - }, - initialize: function initialize(map, overlay, options) { - this._overlay = overlay; - this._map = map; - L.setOptions(this, options); - L.Toolbar2.Action.prototype.initialize.call(this, options); - - this._injectIconSet(); - }, - _createIcon: function _createIcon(toolbar, container, args) { - var _this = this; - - var iconOptions = this.options.toolbarIcon; - var className = iconOptions.className; - var edit = this._overlay.editing; - this.toolbar = toolbar; - this._icon = L.DomUtil.create('li', '', container); - this._link = L.DomUtil.create('a', '', this._icon); - - if (iconOptions.svg) { - this._link.innerHTML = L.IconUtil.create(iconOptions.html); - } else { - this._link.innerHTML = iconOptions.html; - } - - this._link.setAttribute('href', '#'); - - this._link.setAttribute('title', iconOptions.tooltip); - - this._link.setAttribute('role', 'button'); - - L.DomUtil.addClass(this._link, this.constructor.baseClass); - - if (className) { - L.DomUtil.addClass(this._link, className); - - if (className === 'disabled') { - L.DomUtil.addClass(this._icon, className); - } - - if (className === edit._mode) { - L.DomUtil.addClass(this._link, 'selected-mode'); - } else { - L.DomUtil.removeClass(this._link, 'selected-mode'); - } - } - - L.DomEvent.on(this._link, 'click', this.enable, this); - L.DomEvent.on(this._overlay, 'update', function () { - var match = _this._link.innerHTML.match(/xlink:href="#restore"/); - - if (match && match.length === 1) { - _this._enableAction(); - } - }); - /* Add secondary toolbar */ - - this._addSubToolbar(toolbar, this._icon, args); - }, - _injectIconSet: function _injectIconSet() { - if (document.querySelector('#iconset')) { - return; - } - - var el = document.createElement('div'); - el.id = 'iconset'; - el.setAttribute('hidden', 'hidden'); - el.innerHTML = new L.ToolbarIconSet().render(); - document.querySelector('.leaflet-marker-pane').appendChild(el); - }, - _enableAction: function _enableAction() { - L.DomUtil.removeClass(this._link.parentElement, 'disabled'); - L.DomUtil.removeClass(this._link, 'disabled'); - }, - _disableAction: function _disableAction() { - L.DomUtil.addClass(this._link.parentElement, 'disabled'); - L.DomUtil.addClass(this._link, 'disabled'); - } -}); - -L.editAction = function (map, overlay, options) { - return new L.EditAction(map, overlay, options); -}; - -/***/ }), - -/***/ "./src/edit/actions/ExportAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/ExportAction.js ***! - \******************************************/ -/***/ (function() { - -L.ExportAction = L.EditAction.extend({ - // This function is executed every time we select an image - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var tooltip; - this.isExporting = false; - this.mouseLeaveSkip = true; - this.isHooksExecuted = false; - - if (edit instanceof L.DistortableImage.Edit) { - L.DistortableImage.action_map.e = '_getExport'; - tooltip = overlay.options.translation.exportImage; - } else { - L.DistortableImage.group_action_map.e = 'runExporter'; - tooltip = overlay.options.translation.exportImages; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'get_app', - tooltip: tooltip - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - if (edit instanceof L.DistortableImage.Edit) { - edit._getExport(); - - return; - } // Make sure that addHooks is executed only once, event listeners will handle the rest - - - if (this.isHooksExecuted) { - return; - } else { - this.isHooksExecuted = true; - } - - var exportTool = this._link.parentElement; - this.mouseEnterHandler = this.handleMouseEnter.bind(this); - this.mouseLeaveHandler = this.handleMouseLeave.bind(this); - L.DomEvent.on(exportTool, 'click', function () { - if (!this.isExporting) { - this.isExporting = true; - this.renderExportIcon(); - setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100); - edit.runExporter().then(function () { - this.resetState(); - this.detachMouseEventListeners(exportTool); - }.bind(this)); - } else { - // Clicking on the export icon after export has started will be ignored - if (this.mouseLeaveSkip) { - return; - } - - this.resetState(); - this.detachMouseEventListeners(exportTool); - edit.cancelExport(); - } - }, this); - }, - resetState: function resetState() { - this.renderDownloadIcon(); - this.isExporting = false; - this.mouseLeaveSkip = true; - }, - attachMouseEventListeners: function attachMouseEventListeners(element) { - element.addEventListener('mouseenter', this.mouseEnterHandler); - element.addEventListener('mouseleave', this.mouseLeaveHandler); - }, - detachMouseEventListeners: function detachMouseEventListeners(element) { - element.removeEventListener('mouseenter', this.mouseEnterHandler); - element.removeEventListener('mouseleave', this.mouseLeaveHandler); - }, - handleMouseEnter: function handleMouseEnter() { - this.renderCancelIcon(); - }, - handleMouseLeave: function handleMouseLeave() { - if (this.mouseLeaveSkip) { - this.mouseLeaveSkip = false; - } else { - this.renderExportIcon(); - } - }, - renderDownloadIcon: function renderDownloadIcon() { - 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 renderExportIcon() { - L.IconUtil.toggleXlink(this._link, 'spinner'); - L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...'); - L.IconUtil.addClassToSvg(this._link, 'loader'); - }, - renderCancelIcon: function renderCancelIcon() { - L.IconUtil.toggleXlink(this._link, 'cancel'); - L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...'); - L.DomUtil.removeClass(this._link.firstChild, 'loader'); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/FreeRotateAction.js": -/*!**********************************************!*\ - !*** ./src/edit/actions/FreeRotateAction.js ***! - \**********************************************/ -/***/ (function() { - -L.FreeRotateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'crop_rotate', - tooltip: overlay.options.translation.freeRotateImage, - className: 'freeRotate' - }; - L.DistortableImage.action_map.f = '_freeRotateMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._freeRotateMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/GeolocateAction.js": -/*!*********************************************!*\ - !*** ./src/edit/actions/GeolocateAction.js ***! - \*********************************************/ -/***/ (function() { - -L.GeolocateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'explore', - tooltip: overlay.options.translation.geolocateImage, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var image = this._overlay.getElement(); - - EXIF.getData(image, L.EXIF(image)); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/LockAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/LockAction.js ***! - \****************************************/ -/***/ (function() { - -L.LockAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use; - var tooltip; - - if (edit instanceof L.DistortableImage.Edit) { - L.DistortableImage.action_map.u = '_unlock'; - L.DistortableImage.action_map.l = '_lock'; - tooltip = overlay.options.translation.lockMode; - use = edit.isMode('lock') ? 'lock' : 'unlock'; - } else { - L.DistortableImage.group_action_map.l = '_lockGroup'; - tooltip = overlay.options.translation.lockImages; - use = 'lock'; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: 'lock' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - if (edit instanceof L.DistortableImage.Edit) { - edit._toggleLockMode(); - } else { - edit._lockGroup(); - } - } -}); - -/***/ }), - -/***/ "./src/edit/actions/OpacityAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/OpacityAction.js ***! - \*******************************************/ -/***/ (function() { - -L.OpacityAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var mode = edit._mode; - var use; - var tooltip; - - if (edit._transparent) { - use = 'opacity_empty'; - tooltip = overlay.options.translation.makeImageOpaque; - } else { - use = 'opacity'; - tooltip = overlay.options.translation.makeImageTransparent; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: mode === 'lock' ? 'disabled' : '' - }; - L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - var link = this._link; - L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty'); - L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); - - edit._toggleOpacity(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/RestoreAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/RestoreAction.js ***! - \*******************************************/ -/***/ (function() { - -L.RestoreAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var mode = L.Utils.getNestedVal(overlay, 'editing', '_mode'); - var edited = overlay.edited; - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'restore', - tooltip: overlay.options.translation.restoreImage, - className: edited && mode !== 'lock' ? '' : 'disabled' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var ov = this._overlay; - L.DomEvent.on(ov, { - edit: this._enableAction, - restore: this._disableAction - }, this); - ov.restore(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/RotateAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/RotateAction.js ***! - \******************************************/ -/***/ (function() { - -L.RotateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'rotate', - tooltip: overlay.options.translation.rotateImage, - className: 'rotate' - }; - L.DistortableImage.action_map.r = '_rotateMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._rotateMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/ScaleAction.js": -/*!*****************************************!*\ - !*** ./src/edit/actions/ScaleAction.js ***! - \*****************************************/ -/***/ (function() { - -L.ScaleAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'scale', - tooltip: overlay.options.translation.scaleImage, - className: 'scale' - }; - L.DistortableImage.action_map.s = '_scaleMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._scaleMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/StackAction.js": -/*!*****************************************!*\ - !*** ./src/edit/actions/StackAction.js ***! - \*****************************************/ -/***/ (function() { - -L.StackAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use; - var tooltip; - - if (edit._toggledImage) { - use = 'flip_to_back'; - tooltip = overlay.options.translation.stackToFront; - } else { - use = 'flip_to_front'; - tooltip = overlay.options.translation.stackToBack; - } - - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp'; - L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back'); - L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back'); - - edit._toggleOrder(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/UnlockAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/UnlockAction.js ***! - \******************************************/ -/***/ (function() { - -L.UnlockAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'unlock', - tooltip: overlay.options.translation.unlockImages - }; - L.DistortableImage.group_action_map.u = '_unlockGroup'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - - edit._unlockGroup(); - } -}); - -/***/ }), - -/***/ "./src/edit/getEXIFdata.js": -/*!*********************************!*\ - !*** ./src/edit/getEXIFdata.js ***! - \*********************************/ -/***/ (function() { - -/* eslint-disable no-unused-vars */ -L.EXIF = function getEXIFdata(img) { - if (Object.keys(EXIF.getAllTags(img)).length !== 0) { - console.log(EXIF.getAllTags(img)); - var GPS = EXIF.getAllTags(img); - var altitude; - /* If the lat/lng is available. */ - - if (typeof GPS.GPSLatitude !== 'undefined' && typeof GPS.GPSLongitude !== 'undefined') { - // sadly, encoded in [degrees,minutes,seconds] - // primitive value = GPS.GPSLatitude[x].numerator - var lat = GPS.GPSLatitude[0] + GPS.GPSLatitude[1] / 60 + GPS.GPSLatitude[2] / 3600; - var lng = GPS.GPSLongitude[0] + GPS.GPSLongitude[1] / 60 + GPS.GPSLongitude[2] / 3600; - - if (GPS.GPSLatitudeRef !== 'N') { - lat = lat * -1; - } - - if (GPS.GPSLongitudeRef === 'W') { - lng = lng * -1; - } - } // Attempt to use GPS compass heading; will require - // some trig to calc corner points, which you can find below: - - - var angle = 0; // "T" refers to "True north", so -90. - - if (GPS.GPSImgDirectionRef === 'T') { - angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); // "M" refers to "Magnetic north" - } else if (GPS.GPSImgDirectionRef === 'M') { - angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); - } else { - console.log('No compass data found'); - } - - console.log('Orientation:', GPS.Orientation); - /* If there is orientation data -- i.e. landscape/portrait etc */ - - if (GPS.Orientation === 6) { - // CCW - angle += Math.PI / 180 * -90; - } else if (GPS.Orientation === 8) { - // CW - angle += Math.PI / 180 * 90; - } else if (GPS.Orientation === 3) { - // 180 - angle += Math.PI / 180 * 180; - } - /* If there is altitude data */ - - - if (typeof GPS.GPSAltitude !== 'undefined' && typeof GPS.GPSAltitudeRef !== 'undefined') { - // Attempt to use GPS altitude: - // (may eventually need to find EXIF field of view for correction) - if (typeof GPS.GPSAltitude !== 'undefined' && typeof GPS.GPSAltitudeRef !== 'undefined') { - altitude = GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator + GPS.GPSAltitudeRef; - } else { - altitude = 0; // none - } - } - } else { - alert('EXIF initialized. Press again to view data in console.'); - } -}; - -/***/ }), - -/***/ "./src/edit/handles/DistortHandle.js": -/*!*******************************************!*\ - !*** ./src/edit/handles/DistortHandle.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortHandle = L.EditHandle.extend({ - options: { - TYPE: 'distort', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - overlay.setCorner(this._corner, this.getLatLng()); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.distortHandle = function (overlay, idx, options) { - return new L.DistortHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/DragHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/DragHandle.js ***! - \****************************************/ -/***/ (function() { - -L.DragHandle = L.EditHandle.extend({ - options: { - TYPE: 'drag', - icon: L.icon({ - // eslint-disable-next-line max-len - 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=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - overlay.dragBy(formerLatLng, newLatLng); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.dragHandle = function (overlay, idx, options) { - return new L.DragHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/EditHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/EditHandle.js ***! - \****************************************/ -/***/ (function() { - -L.EditHandle = L.Marker.extend({ - initialize: function initialize(overlay, corner, options) { - var latlng = overlay.getCorner(corner); - L.setOptions(this, options); - this._handled = overlay; - this._corner = corner; - var markerOptions = { - draggable: true, - zIndexOffset: 10 - }; - - if (options && options.hasOwnProperty('draggable')) { - markerOptions.draggable = options.draggable; - } - - L.Marker.prototype.initialize.call(this, latlng, markerOptions); - }, - onAdd: function onAdd(map) { - L.Marker.prototype.onAdd.call(this, map); - - this._bindListeners(); - - this.updateHandle(); - }, - onRemove: function onRemove(map) { - this._unbindListeners(); - - L.Marker.prototype.onRemove.call(this, map); - }, - _onHandleDragStart: function _onHandleDragStart() { - this._handled.fire('editstart'); - }, - _onHandleDragEnd: function _onHandleDragEnd() { - this._fireEdit(); - }, - _fireEdit: function _fireEdit() { - this._handled.edited = true; - - this._handled.fire('edit'); - }, - _bindListeners: function _bindListeners() { - this.on({ - contextmenu: L.DomEvent.stop, - dragstart: this._onHandleDragStart, - drag: this._onHandleDrag, - dragend: this._onHandleDragEnd - }, this); - - this._handled._map.on('zoomend', this.updateHandle, this); - - this._handled.on('update', this.updateHandle, this); - }, - _unbindListeners: function _unbindListeners() { - this.off({ - contextmenu: L.DomEvent.stop, - dragstart: this._onHandleDragStart, - drag: this._onHandleDrag, - dragend: this._onHandleDragEnd - }, this); - - this._handled._map.off('zoomend', this.updateHandle, this); - - this._handled.off('update', this.updateHandle, this); - }, - - /* Takes two latlngs and calculates the scaling difference. */ - _calculateScalingFactor: function _calculateScalingFactor(latlngA, latlngB) { - var overlay = this._handled; - var map = overlay._map; - var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); - var formerPoint = map.latLngToLayerPoint(latlngA); - var newPoint = map.latLngToLayerPoint(latlngB); - - var formerRadiusSquared = this._d2(centerPoint, formerPoint); - - var newRadiusSquared = this._d2(centerPoint, newPoint); - - return Math.sqrt(newRadiusSquared / formerRadiusSquared); - }, - - /* Distance between two points in cartesian space, squared (distance formula). */ - _d2: function _d2(a, b) { - var dx = a.x - b.x; - var dy = a.y - b.y; - return Math.pow(dx, 2) + Math.pow(dy, 2); - }, - - /* Takes two latlngs and calculates the angle between them. */ - calculateAngleDelta: function calculateAngleDelta(latlngA, latlngB) { - var overlay = this._handled; - var map = overlay._map; - var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); - var formerPoint = map.latLngToLayerPoint(latlngA); - var newPoint = map.latLngToLayerPoint(latlngB); - var initialAngle = Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x); - var newAngle = Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x); - return newAngle - initialAngle; - } -}); - -/***/ }), - -/***/ "./src/edit/handles/FreeRotateHandle.js": -/*!**********************************************!*\ - !*** ./src/edit/handles/FreeRotateHandle.js ***! - \**********************************************/ -/***/ (function() { - -L.FreeRotateHandle = L.EditHandle.extend({ - options: { - TYPE: 'freeRotate', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - '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 _onHandleDrag() { - var overlay = this._handled; - var map = overlay._map; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - var angle = this.calculateAngleDelta(formerLatLng, newLatLng); - - var scale = this._calculateScalingFactor(formerLatLng, newLatLng); - - if (angle !== 0) { - overlay.rotateBy(angle, 'rad'); - } - - var edgeMinWidth = overlay.edgeMinWidth; - - if (!edgeMinWidth) { - edgeMinWidth = 50; - } - /* just in case */ - - - var corner1 = map.latLngToContainerPoint(overlay.getCorner(0)); - var corner2 = map.latLngToContainerPoint(overlay.getCorner(1)); - var w = Math.abs(corner1.x - corner2.x); - var h = Math.abs(corner1.y - corner2.y); - var distance = Math.sqrt(w * w + h * h); - - if (distance > edgeMinWidth || scale > 1) { - overlay.scaleBy(scale); - } else { - overlay.scaleBy(1); - } - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.freeRotateHandle = function (overlay, idx, options) { - return new L.FreeRotateHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/LockHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/LockHandle.js ***! - \****************************************/ -/***/ (function() { - -L.LockHandle = L.EditHandle.extend({ - options: { - TYPE: 'lock', - interactive: false, - icon: L.icon({ - // eslint-disable-next-line max-len - iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - onRemove: function onRemove(map) { - this.unbindTooltip(); - L.EditHandle.prototype.onRemove.call(this, map); - }, - _bindListeners: function _bindListeners() { - var icon = this.getElement(); - - L.EditHandle.prototype._bindListeners.call(this); - - L.DomEvent.on(icon, { - mousedown: this._tooltipOn, - mouseup: this._tooltipOff - }, this); - L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this); - }, - _unbindListeners: function _unbindListeners() { - var icon = this.getElement(); - - L.EditHandle.prototype._bindListeners.call(this); - - L.DomEvent.off(icon, { - mousedown: this._tooltipOn, - mouseup: this._tooltipOff - }, this); - L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this); - }, - - /* cannot be dragged */ - _onHandleDrag: function _onHandleDrag() {}, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - }, - _tooltipOn: function _tooltipOn(e) { - var eP = this._handled.parentGroup; - var edit = eP ? eP.editing : this._handled.editing; - - if (e.shiftKey) { - return; - } - - if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { - return; - } - - var handlesArr = edit._lockHandles; - this._timer = setTimeout(L.bind(function () { - if (this._timeout) { - clearTimeout(this._timeout); - } - - if (!this.getTooltip()) { - this.bindTooltip('Locked!', { - permanent: true - }); - } else { - handlesArr.eachLayer(function (handle) { - if (this !== handle) { - handle.closeTooltip(); - } - }); - } - - this.openTooltip(); - }, this), 500); - }, - _tooltipOff: function _tooltipOff(e) { - var eP = this._handled.parentGroup; - var edit = eP ? eP.editing : this._handled.editing; - - if (e.shiftKey) { - return; - } - - if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { - return; - } - - var handlesArr = edit._lockHandles; - - if (e.currentTarget === document) { - handlesArr.eachLayer(function (handle) { - handle.closeTooltip(); - }); - } - - if (this._timer) { - clearTimeout(this._timer); - } - - this._timeout = setTimeout(L.bind(function () { - this.closeTooltip(); - }, this), 400); - } -}); - -L.lockHandle = function (overlay, idx, options) { - return new L.LockHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/RotateHandle.js": -/*!******************************************!*\ - !*** ./src/edit/handles/RotateHandle.js ***! - \******************************************/ -/***/ (function() { - -L.RotateHandle = L.EditHandle.extend({ - options: { - TYPE: 'rotate', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - '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 _onHandleDrag() { - var overlay = this._handled; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - var angle = this.calculateAngleDelta(formerLatLng, newLatLng); - /* - * running rotation logic even for an angle delta of 0 - * prevents a small, occasional marker flicker - */ - - overlay.rotateBy(angle, 'rad'); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.rotateHandle = function (overlay, idx, options) { - return new L.RotateHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/ScaleHandle.js": -/*!*****************************************!*\ - !*** ./src/edit/handles/ScaleHandle.js ***! - \*****************************************/ -/***/ (function() { - -L.ScaleHandle = L.EditHandle.extend({ - options: { - TYPE: 'scale', - icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - var map = overlay._map; - var edgeMinWidth = overlay.edgeMinWidth; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - - var scale = this._calculateScalingFactor(formerLatLng, newLatLng); - /* - * checks whether the "edgeMinWidth" property is set and tracks the minimum edge length; - * this enables preventing scaling to zero, but we might also add an overall scale limit - */ - - - if (!edgeMinWidth) { - edgeMinWidth = 50; - } - /* just in case */ - - - var corner1 = map.latLngToLayerPoint(overlay.getCorner(0)); - var corner2 = map.latLngToLayerPoint(overlay.getCorner(1)); - var w = Math.abs(corner1.x - corner2.x); - var h = Math.abs(corner1.y - corner2.y); - var distance = Math.sqrt(w * w + h * h); - - if (distance > edgeMinWidth || scale > 1) { - overlay.scaleBy(scale); - /* - * running scale logic even for a scale ratio of 1 - * prevents a small, occasional marker flicker - */ - } else { - overlay.scaleBy(1); - } - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); - -L.scaleHandle = function (overlay, idx, options) { - return new L.ScaleHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/toolbars/DistortableImage.ControlBar.js": -/*!**********************************************************!*\ - !*** ./src/edit/toolbars/DistortableImage.ControlBar.js ***! - \**********************************************************/ -/***/ (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 (options) { - return new L.DistortableImage.ControlBar(options); -}; -/** addInitHooks run before onAdd */ - - -L.DistortableCollection.addInitHook(function () { - /** Default actions */ - this.ACTIONS = [L.ExportAction, L.DeleteAction, L.LockAction, L.UnlockAction]; // all possible modes - - L.DistortableCollection.Edit.MODES = { - lock: L.LockAction, - unlock: L.UnlockAction - }; - var a = this.options.actions ? this.options.actions : this.ACTIONS; - this.editing = L.distortableCollection.edit(this, { - actions: a - }); -}); - -/***/ }), - -/***/ "./src/edit/toolbars/DistortableImage.PopupBar.js": -/*!********************************************************!*\ - !*** ./src/edit/toolbars/DistortableImage.PopupBar.js ***! - \********************************************************/ -/***/ (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 initialize(latlng, options) { - L.setOptions(this, options); - L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options); - }, - addHooks: function addHooks(map, ov) { - this.map = map; - this.ov = ov; - }, - tools: function tools() { - if (this._ul) { - return this._ul.children; - } - }, - clickTool: function clickTool(name) { - var tools = this.tools(); - - for (var i = 0; i < tools.length; i++) { - var tool = tools.item(i).children[0]; - - if (L.DomUtil.hasClass(tool, name)) { - tool.click(); - return tool; - } - } - - return false; - } -}); - -L.distortableImage.popupBar = function (latlng, options) { - return new L.DistortableImage.PopupBar(latlng, options); -}; - -L.DistortableImageOverlay.addInitHook(function () { - /** Default actions */ - this.ACTIONS = [L.DragAction, L.ScaleAction, L.DistortAction, L.RotateAction, L.FreeRotateAction, L.LockAction, L.OpacityAction, L.BorderAction, L.ExportAction, L.DeleteAction]; // all possible modes - - L.DistortableImage.Edit.MODES = { - drag: L.DragAction, - scale: L.ScaleAction, - distort: L.DistortAction, - rotate: L.RotateAction, - freeRotate: L.FreeRotateAction, - lock: L.LockAction - }; - var a = this.options.actions ? this.options.actions : this.ACTIONS; - this.editing = L.distortableImage.edit(this, { - actions: a - }); -}); - -/***/ }), - -/***/ "./src/iconsets/IconSet.js": -/*!*********************************!*\ - !*** ./src/iconsets/IconSet.js ***! - \*********************************/ -/***/ (function() { - -/* this is the baseclass other IconSets inherit from, -* we don't use it directly */ -L.IconSet = L.Class.extend({ - _svg: '', - _symbols: '', - render: function render() { - this.addSymbols(this._symbols); - return this._svg; - }, - addSymbols: function addSymbols(symbols) { - this._svg += symbols; - } -}); - -/***/ }), - -/***/ "./src/iconsets/KeymapperIconSet.js": -/*!******************************************!*\ - !*** ./src/iconsets/KeymapperIconSet.js ***! - \******************************************/ -/***/ (function() { - -L.KeymapperIconSet = L.IconSet.extend({ - _symbols: // eslint-disable-next-line max-len - '' -}); - -/***/ }), - -/***/ "./src/iconsets/ToolbarIconSet.js": -/*!****************************************!*\ - !*** ./src/iconsets/ToolbarIconSet.js ***! - \****************************************/ -/***/ (function() { - -/* eslint-disable max-len */ -L.ToolbarIconSet = L.IconSet.extend({ - _symbols: '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' -}); - -/***/ }), - -/***/ "./src/mapmixins/BoxCollector.js": -/*!***************************************!*\ - !*** ./src/mapmixins/BoxCollector.js ***! - \***************************************/ -/***/ (function() { - -L.Map.mergeOptions({ - boxCollector: true, - boxZoom: false -}); -/** - * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with - * our `L.DistortableCollection` class instead of a zoom box. - * */ - -L.Map.BoxCollector = L.Map.BoxZoom.extend({ - initialize: function initialize(map) { - this._map = map; - this._container = map._container; - this._pane = map._panes.overlayPane; - this._resetStateTimeout = 0; - map.on('unload', this._destroy, this); - }, - addHooks: function addHooks() { - L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this); - }, - removeHooks: function removeHooks() { - L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this); - }, - moved: function moved() { - return this._moved; - }, - _destroy: function _destroy() { - L.DomUtil.remove(this._pane); - delete this._pane; - }, - _resetState: function _resetState() { - this._resetStateTimeout = 0; - this._moved = false; - }, - _clearDeferredResetState: function _clearDeferredResetState() { - if (this._resetStateTimeout !== 0) { - clearTimeout(this._resetStateTimeout); - this._resetStateTimeout = 0; - } - }, - _onMouseDown: function _onMouseDown(e) { - if (!e.shiftKey || e.which !== 1 && e.button !== 1) { - return false; - } // Clear the deferred resetState if it hasn't executed yet, otherwise it - // will interrupt the interaction and orphan a box element in the container. - - - this._clearDeferredResetState(); - - this._resetState(); - - L.DomUtil.disableTextSelection(); - L.DomUtil.disableImageDrag(); - this._startPoint = this._map.mouseEventToContainerPoint(e); - L.DomEvent.on(document, { - contextmenu: L.DomEvent.stop, - mousemove: this._onMouseMove, - mouseup: this._onMouseUp - }, this); - }, - _onMouseMove: function _onMouseMove(e) { - if (!this._moved) { - this._moved = true; - 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(e); - this._bounds = L.bounds(this._startPoint, this._point); - - var size = this._bounds.getSize(); - - L.DomUtil.setPosition(this._box, this._bounds.min); - this._box.style.width = size.x + 'px'; - this._box.style.height = size.y + 'px'; - }, - _finish: function _finish() { - if (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 _onMouseUp(e) { - if (e.which !== 1 && e.button !== 1) { - return; - } - - this._finish(); - - if (!this._moved) { - return; - } // Postpone to next JS tick so internal click event handling - // still see it as "moved". - - - this._clearDeferredResetState(); - - this._resetStateTimeout = setTimeout(L.Util.bind(this._resetState, this), 0); - var bounds = L.latLngBounds(this._map.containerPointToLatLng(this._bounds.getBottomLeft()), this._map.containerPointToLatLng(this._bounds.getTopRight())); - - var zoom = this._map.getZoom(); - - var center = this._map.getCenter(); // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344 - - - bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center); - - this._map.fire('boxcollectend', { - boxCollectBounds: bounds - }); - } -}); -L.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector); - -/***/ }), - -/***/ "./src/mapmixins/DoubleClickLabels.js": -/*!********************************************!*\ - !*** ./src/mapmixins/DoubleClickLabels.js ***! - \********************************************/ -/***/ (function() { - -L.Map.mergeOptions({ - doubleClickLabels: true -}); -/** - * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant` - * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it. - */ - -L.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({ - enable: function enable() { - var map = this._map; - - if (this._enabled) { - return this; - } // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled. - - - if (map.doubleClickZoom.enabled()) { - map.doubleClickZoom.disable(); - } - - this._map.fire('singleclickon'); - - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - if (!this._enabled) { - return this; - } - - this._enabled = false; - this.removeHooks(); - return this; - }, - _fireIfSingle: function _fireIfSingle(e) { - var map = this._map; - var oe = e.originalEvent; // prevents deselection in case of box selector - - if (oe && oe.shiftKey) { - return; - } - - map._clicked += 1; - this._map._clickTimeout = setTimeout(function () { - if (map._clicked === 1) { - map._clicked = 0; - map.fire('singleclick', { - type: 'singleclick' - }); - } else { - // manually fire doubleclick event only for touch screens that don't natively fire it - if (L.Browser.touch && oe && oe.sourceCapabilities.firesTouchEvents) { - map.fire('dblclick'); - } - } - }, 250); - }, - _onDoubleClick: function _onDoubleClick() { - var map = this._map; - var labels = map._labels; - setTimeout(function () { - map._clicked = 0; - clearTimeout(map._clickTimeout); - }, 0); - - if (!labels) { - return; - } - - if (labels.options.opacity === 1) { - labels.options.opacity = 0; - labels.setOpacity(0); - } else { - labels.options.opacity = 1; - labels.setOpacity(1); - } - } -}); -L.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels); - -/***/ }), - -/***/ "./src/mapmixins/DoubleClickZoom.js": -/*!******************************************!*\ - !*** ./src/mapmixins/DoubleClickZoom.js ***! - \******************************************/ -/***/ (function() { - -/** - * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it - * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`. - * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler - */ -L.Map.DoubleClickZoom.include({ - addHooks: function addHooks() { - this._map.on({ - click: this._fireIfSingle, - dblclick: this._onDoubleClick - }, this); - }, - removeHooks: function removeHooks() { - this._map.off({ - click: this._fireIfSingle, - dblclick: this._onDoubleClick - }, this); - }, - enable: function enable() { - if (this._enabled) { - return this; - } // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first - - - if (this._map.doubleClickLabels) { - if (this._map.doubleClickLabels.enabled()) { - return this; - } - } // signify to collection/instance classes to turn on 'singleclick' listeners - - - this._map.fire('singleclickon'); - - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - if (!this._enabled) { - return this; - } // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners. - - - this._map.fire('singleclickoff'); - - this._enabled = false; - this.removeHooks(); - return this; - }, - _fireIfSingle: function _fireIfSingle(e) { - var map = this._map; - var oe = e.originalEvent; // prevents deselection in case of box selector - - if (oe && oe.shiftKey) { - return; - } - - map._clicked += 1; - this._map._clickTimeout = setTimeout(function () { - if (map._clicked === 1) { - map._clicked = 0; - map.fire('singleclick', { - type: 'singleclick' - }); - } else { - // manually fire doubleclick event only for touch screens that don't natively fire it - if (L.Browser.touch && oe && oe.sourceCapabilities.firesTouchEvents) { - /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the - passed "e" (for now). To generate a 'real' DOM event that will have all of its corresponding core - properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */ - map._fireDOMEvent(oe, 'dblclick', [map]); - } - } - }, 250); - }, - _onDoubleClick: function _onDoubleClick(e) { - var map = this._map; - var oe = e.originalEvent; - setTimeout(function () { - map._clicked = 0; - clearTimeout(map._clickTimeout); - }, 0); - - if (!oe) { - return false; - } - - var oldZoom = map.getZoom(); - var delta = map.options.zoomDelta; - var zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta; - - if (map.options.doubleClickZoom === 'center') { - map.setZoom(zoom); - } else { - map.setZoomAround(e.containerPoint, zoom); - } - } -}); - -/***/ }), - -/***/ "./src/mapmixins/MapMixins.js": -/*!************************************!*\ - !*** ./src/mapmixins/MapMixins.js ***! - \************************************/ -/***/ (function() { - -/* eslint-disable max-len */ -L.Map.include({ - _clicked: 0, - addGoogleMutant: function addGoogleMutant(opts) { - var url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}'; - opts = this.mutantOptions = L.extend({ - mutantOpacity: 0.8, - maxZoom: 24, - maxNativeZoom: 20, - minZoom: 0, - labels: true, - labelOpacity: 1, - doubleClickLabels: true - }, opts); - - if (!opts.labels) { - this.mutantOptions = L.extend(this.mutantOptions, { - labelOpacity: opts.labels ? 1 : undefined, - doubleClickLabels: opts.labels ? true : undefined - }); - } - - this._googleMutant = L.tileLayer(url, { - maxZoom: opts.maxZoom, - maxNativeZoom: opts.maxNativeZoom, - minZoom: opts.minZoom, - opacity: opts.mutantOpacity - }).addTo(this); - - if (opts.labels) { - this._addLabels(opts); - } // shouldn't have this handler at all if there are no labels to toggle - else { - this.doubleClickLabels = undefined; - } - - return this; - }, - _addLabels: function _addLabels(opts) { - var url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}'; - - if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) { - opts.labelOpacity = 1; - } - - this._labels = L.tileLayer(url, { - attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors', - subdomains: 'abcd', - interactive: false, - opacity: opts.labelOpacity, - maxZoom: opts.maxZoom, - maxNativeZoom: opts.maxNativeZoom, - minZoom: opts.minZoom, - ext: 'png' - }).addTo(this); - - if (this.mutantOptions.doubleClickLabels) { - this.doubleClickLabels.enable(); - } - - return this; - } -}); // start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead -// during initialization - -L.Map.addInitHook(function () { - this.doubleClickLabels.disable(); - this.doubleClickZoom.enable(); -}); - -/***/ }), - -/***/ "./src/util/DomUtil.js": -/*!*****************************!*\ - !*** ./src/util/DomUtil.js ***! - \*****************************/ -/***/ (function() { - -L.DomUtil = L.extend(L.DomUtil, { - initTranslation: function initTranslation(obj) { - this.translation = obj; - }, - getMatrixString: function getMatrixString(m) { - var is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d; - /* - * Since matrix3d takes a 4*4 matrix, we add in an empty row and column, - * which act as the identity on the z-axis. - * See: - * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ - * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry - */ - - var matrix = [m[0], m[3], 0, m[6], m[1], m[4], 0, m[7], 0, 0, 1, 0, m[2], m[5], 0, m[8]]; - var str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : ''; - - if (!is3d) { - console.log('Your browser must support 3D CSS transforms' + 'in order to use DistortableImageOverlay.'); - } - - return str; - }, - toggleClass: function toggleClass(el, className) { - var c = className; - return this.hasClass(el, c) ? this.removeClass(el, c) : this.addClass(el, c); - }, - confirmDelete: function confirmDelete() { - return window.confirm(this.translation.confirmImageDelete); - }, - confirmDeletes: function confirmDeletes(n) { - if (n === 1) { - return this.confirmDelete(); - } - - var translation = this.translation.confirmImagesDeletes; - var warningMsg = ''; - - if (typeof translation === 'function') { - warningMsg = translation(n); - } else { - warningMsg = translation; - } - - return window.confirm(warningMsg); - } -}); - -/***/ }), - -/***/ "./src/util/IconUtil.js": -/*!******************************!*\ - !*** ./src/util/IconUtil.js ***! - \******************************/ -/***/ (function() { - -L.IconUtil = { - /* creates an svg elemenet with built in accessibility properties - * and standardized classes for styling, takes in the fragment - * identifier (id) of the symbol to reference. note for symplicity - * we allow providing the icon target with or without the '#' prefix - */ - create: function create(ref) { - if (/^#/.test(ref)) { - ref = ref.replace(/^#/, ''); - } - - return '' + '' + ''; - }, - addClassToSvg: function addClassToSvg(container, loader) { - var svg = container.querySelector('svg'); - - if (svg) { - L.DomUtil.addClass(svg, loader); - } - }, - // finds the use element and toggles its icon reference - toggleXlink: function toggleXlink(container, ref1, ref2) { - if (!/^#/.test(ref1)) { - ref1 = '#' + ref1; - } - - if (!/^#/.test(ref2)) { - ref2 = '#' + ref2; - } - - var use = container.querySelector('use'); - - if (use) { - var toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1; - use.setAttribute('xlink:href', toggled); - return toggled; - } - - return false; - }, - toggleTitle: function toggleTitle(container, title1, title2) { - var toggled = container.getAttribute('title') === title1 ? title2 : title1; - container.setAttribute('title', toggled); - - if (container.hasAttribute('aria-label')) { - container.setAttribute('aria-label', toggled); - } - - return toggled; - } -}; - -/***/ }), - -/***/ "./src/util/ImageUtil.js": -/*!*******************************!*\ - !*** ./src/util/ImageUtil.js ***! - \*******************************/ -/***/ (function() { - -L.ImageUtil = { - getCmPerPixel: function getCmPerPixel(overlay) { - var map = overlay._map; - var dist = map.latLngToLayerPoint(overlay.getCorner(0)).distanceTo(map.latLngToLayerPoint(overlay.getCorner(1))); - return dist * 100 / overlay.getElement().width; - } -}; - -/***/ }), - -/***/ "./src/util/MatrixUtil.js": -/*!********************************!*\ - !*** ./src/util/MatrixUtil.js ***! - \********************************/ -/***/ (function() { - -L.MatrixUtil = { - // Compute the adjugate of m - adj: function adj(m) { - return [m[4] * m[8] - m[5] * m[7], m[2] * m[7] - m[1] * m[8], m[1] * m[5] - m[2] * m[4], m[5] * m[6] - m[3] * m[8], m[0] * m[8] - m[2] * m[6], m[2] * m[3] - m[0] * m[5], m[3] * m[7] - m[4] * m[6], m[1] * m[6] - m[0] * m[7], m[0] * m[4] - m[1] * m[3]]; - }, - // multiply two 3*3 matrices - multmm: function multmm(a, b) { - var c = []; - var i; - - for (i = 0; i < 3; i++) { - for (var j = 0; j < 3; j++) { - var cij = 0; - - for (var k = 0; k < 3; k++) { - cij += a[3 * i + k] * b[3 * k + j]; - } - - c[3 * i + j] = cij; - } - } - - return c; - }, - // multiply a 3*3 matrix and a 3-vector - multmv: function multmv(m, v) { - return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; - }, - // multiply a scalar and a 3*3 matrix - multsm: function multsm(s, m) { - var matrix = []; - - for (var i = 0, l = m.length; i < l; i++) { - matrix.push(s * m[i]); - } - - return matrix; - }, - basisToPoints: function basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) { - var m = [x1, x2, x3, y1, y2, y3, 1, 1, 1]; - var v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]); - return L.MatrixUtil.multmm(m, [v[0], 0, 0, 0, v[1], 0, 0, 0, v[2]]); - }, - project: function project(m, x, y) { - var v = L.MatrixUtil.multmv(m, [x, y, 1]); - return [v[0] / v[2], v[1] / v[2]]; - }, - general2DProjection: function general2DProjection(x1s, y1s, x1d, y1d, x2s, y2s, x2d, y2d, x3s, y3s, x3d, y3d, x4s, y4s, x4d, y4d) { - var s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s); - var d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d); - var m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s)); // Normalize to the unique matrix with m[8] == 1. - // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ - - return L.MatrixUtil.multsm(1 / m[8], m); - } -}; - -/***/ }), - -/***/ "./src/util/TrigUtil.js": -/*!******************************!*\ - !*** ./src/util/TrigUtil.js ***! - \******************************/ -/***/ (function() { - -L.TrigUtil = { - calcAngle: function calcAngle(x, y) { - var unit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'deg'; - return unit === 'deg' ? this.radiansToDegrees(Math.atan2(y, x)) : Math.atan2(y, x); - }, - radiansToDegrees: function radiansToDegrees(angle) { - return angle * 180 / Math.PI; - }, - degreesToRadians: function degreesToRadians(angle) { - return angle * Math.PI / 180; - } -}; - -/***/ }), - -/***/ "./src/util/Utils.js": -/*!***************************!*\ - !*** ./src/util/Utils.js ***! - \***************************/ -/***/ (function() { - -L.Utils = { - initTranslation: function initTranslation() { - var translation = { - 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) { - this.options.translation = translation; - } else { - // If the translation for a word is not specified, fallback to English. - for (var key in translation) { - if (!this.options.translation.hasOwnProperty(key)) { - this.options.translation[key] = translation[key]; - } - } - } - - L.DomUtil.initTranslation(this.options.translation); - }, - getNestedVal: function getNestedVal(obj, key, nestedKey) { - var dig = [key, nestedKey]; - return dig.reduce(function (obj, k) { - return obj && obj[k]; - }, obj); - } -}; - -/***/ }), - -/***/ "./node_modules/events/events.js": -/*!***************************************!*\ - !*** ./node_modules/events/events.js ***! - \***************************************/ -/***/ (function(module) { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -var R = typeof Reflect === 'object' ? Reflect : null -var ReflectApply = R && typeof R.apply === 'function' - ? R.apply - : function ReflectApply(target, receiver, args) { - return Function.prototype.apply.call(target, receiver, args); - } - -var ReflectOwnKeys -if (R && typeof R.ownKeys === 'function') { - ReflectOwnKeys = R.ownKeys -} else if (Object.getOwnPropertySymbols) { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target) - .concat(Object.getOwnPropertySymbols(target)); - }; -} else { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target); - }; -} - -function ProcessEmitWarning(warning) { - if (console && console.warn) console.warn(warning); -} - -var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { - return value !== value; -} - -function EventEmitter() { - EventEmitter.init.call(this); -} -module.exports = EventEmitter; -module.exports.once = once; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._eventsCount = 0; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -var defaultMaxListeners = 10; - -function checkListener(listener) { - if (typeof listener !== 'function') { - throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); - } -} - -Object.defineProperty(EventEmitter, 'defaultMaxListeners', { - enumerable: true, - get: function() { - return defaultMaxListeners; - }, - set: function(arg) { - if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { - throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); - } - defaultMaxListeners = arg; - } -}); - -EventEmitter.init = function() { - - if (this._events === undefined || - this._events === Object.getPrototypeOf(this)._events) { - this._events = Object.create(null); - this._eventsCount = 0; - } - - this._maxListeners = this._maxListeners || undefined; -}; - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { - if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { - throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); - } - this._maxListeners = n; - return this; -}; - -function _getMaxListeners(that) { - if (that._maxListeners === undefined) - return EventEmitter.defaultMaxListeners; - return that._maxListeners; -} - -EventEmitter.prototype.getMaxListeners = function getMaxListeners() { - return _getMaxListeners(this); -}; - -EventEmitter.prototype.emit = function emit(type) { - var args = []; - for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); - var doError = (type === 'error'); - - var events = this._events; - if (events !== undefined) - doError = (doError && events.error === undefined); - else if (!doError) - return false; - - // If there is no 'error' event listener then throw. - if (doError) { - var er; - if (args.length > 0) - er = args[0]; - if (er instanceof Error) { - // Note: The comments on the `throw` lines are intentional, they show - // up in Node's output if this results in an unhandled exception. - throw er; // Unhandled 'error' event - } - // At least give some kind of context to the user - var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); - err.context = er; - throw err; // Unhandled 'error' event - } - - var handler = events[type]; - - if (handler === undefined) - return false; - - if (typeof handler === 'function') { - ReflectApply(handler, this, args); - } else { - var len = handler.length; - var listeners = arrayClone(handler, len); - for (var i = 0; i < len; ++i) - ReflectApply(listeners[i], this, args); - } - - return true; -}; - -function _addListener(target, type, listener, prepend) { - var m; - var events; - var existing; - - checkListener(listener); - - events = target._events; - if (events === undefined) { - events = target._events = Object.create(null); - target._eventsCount = 0; - } else { - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (events.newListener !== undefined) { - target.emit('newListener', type, - listener.listener ? listener.listener : listener); - - // Re-assign `events` because a newListener handler could have caused the - // this._events to be assigned to a new object - events = target._events; - } - existing = events[type]; - } - - if (existing === undefined) { - // Optimize the case of one listener. Don't need the extra array object. - existing = events[type] = listener; - ++target._eventsCount; - } else { - if (typeof existing === 'function') { - // Adding the second element, need to change to array. - existing = events[type] = - prepend ? [listener, existing] : [existing, listener]; - // If we've already got an array, just append. - } else if (prepend) { - existing.unshift(listener); - } else { - existing.push(listener); - } - - // Check for listener leak - m = _getMaxListeners(target); - if (m > 0 && existing.length > m && !existing.warned) { - existing.warned = true; - // No error code for this since it is a Warning - // eslint-disable-next-line no-restricted-syntax - var w = new Error('Possible EventEmitter memory leak detected. ' + - existing.length + ' ' + String(type) + ' listeners ' + - 'added. Use emitter.setMaxListeners() to ' + - 'increase limit'); - w.name = 'MaxListenersExceededWarning'; - w.emitter = target; - w.type = type; - w.count = existing.length; - ProcessEmitWarning(w); - } - } - - return target; -} - -EventEmitter.prototype.addListener = function addListener(type, listener) { - return _addListener(this, type, listener, false); -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.prependListener = - function prependListener(type, listener) { - return _addListener(this, type, listener, true); - }; - -function onceWrapper() { - if (!this.fired) { - this.target.removeListener(this.type, this.wrapFn); - this.fired = true; - if (arguments.length === 0) - return this.listener.call(this.target); - return this.listener.apply(this.target, arguments); - } -} - -function _onceWrap(target, type, listener) { - var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; - var wrapped = onceWrapper.bind(state); - wrapped.listener = listener; - state.wrapFn = wrapped; - return wrapped; -} - -EventEmitter.prototype.once = function once(type, listener) { - checkListener(listener); - this.on(type, _onceWrap(this, type, listener)); - return this; -}; - -EventEmitter.prototype.prependOnceListener = - function prependOnceListener(type, listener) { - checkListener(listener); - this.prependListener(type, _onceWrap(this, type, listener)); - return this; - }; - -// Emits a 'removeListener' event if and only if the listener was removed. -EventEmitter.prototype.removeListener = - function removeListener(type, listener) { - var list, events, position, i, originalListener; - - checkListener(listener); - - events = this._events; - if (events === undefined) - return this; - - list = events[type]; - if (list === undefined) - return this; - - if (list === listener || list.listener === listener) { - if (--this._eventsCount === 0) - this._events = Object.create(null); - else { - delete events[type]; - if (events.removeListener) - this.emit('removeListener', type, list.listener || listener); - } - } else if (typeof list !== 'function') { - position = -1; - - for (i = list.length - 1; i >= 0; i--) { - if (list[i] === listener || list[i].listener === listener) { - originalListener = list[i].listener; - position = i; - break; - } - } - - if (position < 0) - return this; - - if (position === 0) - list.shift(); - else { - spliceOne(list, position); - } - - if (list.length === 1) - events[type] = list[0]; - - if (events.removeListener !== undefined) - this.emit('removeListener', type, originalListener || listener); - } - - return this; - }; - -EventEmitter.prototype.off = EventEmitter.prototype.removeListener; - -EventEmitter.prototype.removeAllListeners = - function removeAllListeners(type) { - var listeners, events, i; - - events = this._events; - if (events === undefined) - return this; - - // not listening for removeListener, no need to emit - if (events.removeListener === undefined) { - if (arguments.length === 0) { - this._events = Object.create(null); - this._eventsCount = 0; - } else if (events[type] !== undefined) { - if (--this._eventsCount === 0) - this._events = Object.create(null); - else - delete events[type]; - } - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - var keys = Object.keys(events); - var key; - for (i = 0; i < keys.length; ++i) { - key = keys[i]; - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = Object.create(null); - this._eventsCount = 0; - return this; - } - - listeners = events[type]; - - if (typeof listeners === 'function') { - this.removeListener(type, listeners); - } else if (listeners !== undefined) { - // LIFO order - for (i = listeners.length - 1; i >= 0; i--) { - this.removeListener(type, listeners[i]); - } - } - - return this; - }; - -function _listeners(target, type, unwrap) { - var events = target._events; - - if (events === undefined) - return []; - - var evlistener = events[type]; - if (evlistener === undefined) - return []; - - if (typeof evlistener === 'function') - return unwrap ? [evlistener.listener || evlistener] : [evlistener]; - - return unwrap ? - unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); -} - -EventEmitter.prototype.listeners = function listeners(type) { - return _listeners(this, type, true); -}; - -EventEmitter.prototype.rawListeners = function rawListeners(type) { - return _listeners(this, type, false); -}; - -EventEmitter.listenerCount = function(emitter, type) { - if (typeof emitter.listenerCount === 'function') { - return emitter.listenerCount(type); - } else { - return listenerCount.call(emitter, type); - } -}; - -EventEmitter.prototype.listenerCount = listenerCount; -function listenerCount(type) { - var events = this._events; - - if (events !== undefined) { - var evlistener = events[type]; - - if (typeof evlistener === 'function') { - return 1; - } else if (evlistener !== undefined) { - return evlistener.length; - } - } - - return 0; -} - -EventEmitter.prototype.eventNames = function eventNames() { - return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; -}; - -function arrayClone(arr, n) { - var copy = new Array(n); - for (var i = 0; i < n; ++i) - copy[i] = arr[i]; - return copy; -} - -function spliceOne(list, index) { - for (; index + 1 < list.length; index++) - list[index] = list[index + 1]; - list.pop(); -} - -function unwrapListeners(arr) { - var ret = new Array(arr.length); - for (var i = 0; i < ret.length; ++i) { - ret[i] = arr[i].listener || arr[i]; - } - return ret; -} - -function once(emitter, name) { - return new Promise(function (resolve, reject) { - function errorListener(err) { - emitter.removeListener(name, resolver); - reject(err); - } - - function resolver() { - if (typeof emitter.removeListener === 'function') { - emitter.removeListener('error', errorListener); - } - resolve([].slice.call(arguments)); - }; - - eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); - if (name !== 'error') { - addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); - } - }); -} - -function addErrorHandlerIfEventEmitter(emitter, handler, flags) { - if (typeof emitter.on === 'function') { - eventTargetAgnosticAddListener(emitter, 'error', handler, flags); - } -} - -function eventTargetAgnosticAddListener(emitter, name, listener, flags) { - if (typeof emitter.on === 'function') { - if (flags.once) { - emitter.once(name, listener); - } else { - emitter.on(name, listener); - } - } else if (typeof emitter.addEventListener === 'function') { - // EventTarget does not have `error` event semantics like Node - // EventEmitters, we do not listen for `error` events here. - emitter.addEventListener(name, function wrapListener(arg) { - // IE does not have builtin `{ once: true }` support so we - // have to do it manually. - if (flags.once) { - emitter.removeEventListener(name, wrapListener); - } - listener(arg); - }); - } else { - throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); - } -} - - -/***/ }), - -/***/ "./node_modules/html-entities/lib/index.js": -/*!*************************************************!*\ - !*** ./node_modules/html-entities/lib/index.js ***! - \*************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; - -var __assign = (this && this.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -var named_references_1 = __webpack_require__(/*! ./named-references */ "./node_modules/html-entities/lib/named-references.js"); -var numeric_unicode_map_1 = __webpack_require__(/*! ./numeric-unicode-map */ "./node_modules/html-entities/lib/numeric-unicode-map.js"); -var surrogate_pairs_1 = __webpack_require__(/*! ./surrogate-pairs */ "./node_modules/html-entities/lib/surrogate-pairs.js"); -var allNamedReferences = __assign(__assign({}, named_references_1.namedReferences), { all: named_references_1.namedReferences.html5 }); -var encodeRegExps = { - specialChars: /[<>'"&]/g, - nonAscii: /(?:[<>'"&\u0080-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, - nonAsciiPrintable: /(?:[<>'"&\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, - extensive: /(?:[\x01-\x0c\x0e-\x1f\x21-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7d\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g -}; -var defaultEncodeOptions = { - mode: 'specialChars', - level: 'all', - numeric: 'decimal' -}; -/** Encodes all the necessary (specified by `level`) characters in the text */ -function encode(text, _a) { - var _b = _a === void 0 ? defaultEncodeOptions : _a, _c = _b.mode, mode = _c === void 0 ? 'specialChars' : _c, _d = _b.numeric, numeric = _d === void 0 ? 'decimal' : _d, _e = _b.level, level = _e === void 0 ? 'all' : _e; - if (!text) { - return ''; - } - var encodeRegExp = encodeRegExps[mode]; - var references = allNamedReferences[level].characters; - var isHex = numeric === 'hexadecimal'; - encodeRegExp.lastIndex = 0; - var _b = encodeRegExp.exec(text); - var _c; - if (_b) { - _c = ''; - var _d = 0; - do { - if (_d !== _b.index) { - _c += text.substring(_d, _b.index); - } - var _e = _b[0]; - var result_1 = references[_e]; - if (!result_1) { - var code_1 = _e.length > 1 ? surrogate_pairs_1.getCodePoint(_e, 0) : _e.charCodeAt(0); - result_1 = (isHex ? '&#x' + code_1.toString(16) : '&#' + code_1) + ';'; - } - _c += result_1; - _d = _b.index + _e.length; - } while ((_b = encodeRegExp.exec(text))); - if (_d !== text.length) { - _c += text.substring(_d); - } - } - else { - _c = - text; - } - return _c; -} -exports.encode = encode; -var defaultDecodeOptions = { - scope: 'body', - level: 'all' -}; -var strict = /&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g; -var attribute = /&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g; -var baseDecodeRegExps = { - xml: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.xml - }, - html4: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.html4 - }, - html5: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.html5 - } -}; -var decodeRegExps = __assign(__assign({}, baseDecodeRegExps), { all: baseDecodeRegExps.html5 }); -var fromCharCode = String.fromCharCode; -var outOfBoundsChar = fromCharCode(65533); -var defaultDecodeEntityOptions = { - level: 'all' -}; -/** Decodes a single entity */ -function decodeEntity(entity, _a) { - var _b = (_a === void 0 ? defaultDecodeEntityOptions : _a).level, level = _b === void 0 ? 'all' : _b; - if (!entity) { - return ''; - } - var _b = entity; - var decodeEntityLastChar_1 = entity[entity.length - 1]; - if (false) {} - else if (false) {} - else { - var decodeResultByReference_1 = allNamedReferences[level].entities[entity]; - if (decodeResultByReference_1) { - _b = decodeResultByReference_1; - } - else if (entity[0] === '&' && entity[1] === '#') { - var decodeSecondChar_1 = entity[2]; - var decodeCode_1 = decodeSecondChar_1 == 'x' || decodeSecondChar_1 == 'X' - ? parseInt(entity.substr(3), 16) - : parseInt(entity.substr(2)); - _b = - decodeCode_1 >= 0x10ffff - ? outOfBoundsChar - : decodeCode_1 > 65535 - ? surrogate_pairs_1.fromCodePoint(decodeCode_1) - : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_1] || decodeCode_1); - } - } - return _b; -} -exports.decodeEntity = decodeEntity; -/** Decodes all entities in the text */ -function decode(text, _a) { - var decodeSecondChar_1 = _a === void 0 ? defaultDecodeOptions : _a, decodeCode_1 = decodeSecondChar_1.level, level = decodeCode_1 === void 0 ? 'all' : decodeCode_1, _b = decodeSecondChar_1.scope, scope = _b === void 0 ? level === 'xml' ? 'strict' : 'body' : _b; - if (!text) { - return ''; - } - var decodeRegExp = decodeRegExps[level][scope]; - var references = allNamedReferences[level].entities; - var isAttribute = scope === 'attribute'; - var isStrict = scope === 'strict'; - decodeRegExp.lastIndex = 0; - var replaceMatch_1 = decodeRegExp.exec(text); - var replaceResult_1; - if (replaceMatch_1) { - replaceResult_1 = ''; - var replaceLastIndex_1 = 0; - do { - if (replaceLastIndex_1 !== replaceMatch_1.index) { - replaceResult_1 += text.substring(replaceLastIndex_1, replaceMatch_1.index); - } - var replaceInput_1 = replaceMatch_1[0]; - var decodeResult_1 = replaceInput_1; - var decodeEntityLastChar_2 = replaceInput_1[replaceInput_1.length - 1]; - if (isAttribute - && decodeEntityLastChar_2 === '=') { - decodeResult_1 = replaceInput_1; - } - else if (isStrict - && decodeEntityLastChar_2 !== ';') { - decodeResult_1 = replaceInput_1; - } - else { - var decodeResultByReference_2 = references[replaceInput_1]; - if (decodeResultByReference_2) { - decodeResult_1 = decodeResultByReference_2; - } - else if (replaceInput_1[0] === '&' && replaceInput_1[1] === '#') { - var decodeSecondChar_2 = replaceInput_1[2]; - var decodeCode_2 = decodeSecondChar_2 == 'x' || decodeSecondChar_2 == 'X' - ? parseInt(replaceInput_1.substr(3), 16) - : parseInt(replaceInput_1.substr(2)); - decodeResult_1 = - decodeCode_2 >= 0x10ffff - ? outOfBoundsChar - : decodeCode_2 > 65535 - ? surrogate_pairs_1.fromCodePoint(decodeCode_2) - : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_2] || decodeCode_2); - } - } - replaceResult_1 += decodeResult_1; - replaceLastIndex_1 = replaceMatch_1.index + replaceInput_1.length; - } while ((replaceMatch_1 = decodeRegExp.exec(text))); - if (replaceLastIndex_1 !== text.length) { - replaceResult_1 += text.substring(replaceLastIndex_1); - } - } - else { - replaceResult_1 = - text; - } - return replaceResult_1; -} -exports.decode = decode; - - -/***/ }), - -/***/ "./node_modules/html-entities/lib/named-references.js": -/*!************************************************************!*\ - !*** ./node_modules/html-entities/lib/named-references.js ***! - \************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.bodyRegExps={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g};exports.namedReferences={xml:{entities:{"<":"<",">":">",""":'"',"'":"'","&":"&"},characters:{"<":"<",">":">",'"':""","'":"'","&":"&"}},html4:{entities:{"'":"'"," ":" "," ":" ","¡":"¡","¡":"¡","¢":"¢","¢":"¢","£":"£","£":"£","¤":"¤","¤":"¤","¥":"Â¥","¥":"Â¥","¦":"¦","¦":"¦","§":"§","§":"§","¨":"¨","¨":"¨","©":"©","©":"©","ª":"ª","ª":"ª","«":"«","«":"«","¬":"¬","¬":"¬","­":"­","­":"­","®":"®","®":"®","¯":"¯","¯":"¯","°":"°","°":"°","±":"±","±":"±","²":"²","²":"²","³":"³","³":"³","´":"´","´":"´","µ":"µ","µ":"µ","¶":"¶","¶":"¶","·":"·","·":"·","¸":"¸","¸":"¸","¹":"¹","¹":"¹","º":"º","º":"º","»":"»","»":"»","¼":"¼","¼":"¼","½":"½","½":"½","¾":"¾","¾":"¾","¿":"¿","¿":"¿","À":"À","À":"À","Á":"Ã","Á":"Ã","Â":"Â","Â":"Â","Ã":"Ã","Ã":"Ã","Ä":"Ä","Ä":"Ä","Å":"Ã…","Å":"Ã…","Æ":"Æ","Æ":"Æ","Ç":"Ç","Ç":"Ç","È":"È","È":"È","É":"É","É":"É","Ê":"Ê","Ê":"Ê","Ë":"Ë","Ë":"Ë","Ì":"ÃŒ","Ì":"ÃŒ","Í":"Ã","Í":"Ã","Î":"ÃŽ","Î":"ÃŽ","Ï":"Ã","Ï":"Ã","Ð":"Ã","Ð":"Ã","Ñ":"Ñ","Ñ":"Ñ","Ò":"Ã’","Ò":"Ã’","Ó":"Ó","Ó":"Ó","Ô":"Ô","Ô":"Ô","Õ":"Õ","Õ":"Õ","Ö":"Ö","Ö":"Ö","×":"×","×":"×","Ø":"Ø","Ø":"Ø","Ù":"Ù","Ù":"Ù","Ú":"Ú","Ú":"Ú","Û":"Û","Û":"Û","Ü":"Ü","Ü":"Ü","Ý":"Ã","Ý":"Ã","Þ":"Þ","Þ":"Þ","ß":"ß","ß":"ß","à":"à","à":"à","á":"á","á":"á","â":"â","â":"â","ã":"ã","ã":"ã","ä":"ä","ä":"ä","å":"Ã¥","å":"Ã¥","æ":"æ","æ":"æ","ç":"ç","ç":"ç","è":"è","è":"è","é":"é","é":"é","ê":"ê","ê":"ê","ë":"ë","ë":"ë","ì":"ì","ì":"ì","í":"í","í":"í","î":"î","î":"î","ï":"ï","ï":"ï","ð":"ð","ð":"ð","ñ":"ñ","ñ":"ñ","ò":"ò","ò":"ò","ó":"ó","ó":"ó","ô":"ô","ô":"ô","õ":"õ","õ":"õ","ö":"ö","ö":"ö","÷":"÷","÷":"÷","ø":"ø","ø":"ø","ù":"ù","ù":"ù","ú":"ú","ú":"ú","û":"û","û":"û","ü":"ü","ü":"ü","ý":"ý","ý":"ý","þ":"þ","þ":"þ","ÿ":"ÿ","ÿ":"ÿ",""":'"',""":'"',"&":"&","&":"&","<":"<","<":"<",">":">",">":">","Œ":"Å’","œ":"Å“","Š":"Å ","š":"Å¡","Ÿ":"Ÿ","ˆ":"ˆ","˜":"Ëœ"," ":" "," ":" "," ":" ","‌":"‌","‍":"â€","‎":"‎","‏":"â€","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","”":"â€","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","ƒ":"Æ’","Α":"Α","Β":"Î’","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Ν":"Î","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Υ":"Î¥","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","π":"Ï€","ρ":"Ï","ς":"Ï‚","σ":"σ","τ":"Ï„","υ":"Ï…","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","ϑ":"Ï‘","ϒ":"Ï’","ϖ":"Ï–","•":"•","…":"…","′":"′","″":"″","‾":"‾","⁄":"â„","℘":"℘","ℑ":"â„‘","ℜ":"ℜ","™":"â„¢","ℵ":"ℵ","←":"â†","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","⇐":"â‡","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","∏":"âˆ","∑":"∑","−":"−","∗":"∗","√":"√","∝":"âˆ","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","⋅":"â‹…","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","⟨":"〈","⟩":"〉","◊":"â—Š","♠":"â™ ","♣":"♣","♥":"♥","♦":"♦"},characters:{"'":"'"," ":" ","¡":"¡","¢":"¢","£":"£","¤":"¤","Â¥":"¥","¦":"¦","§":"§","¨":"¨","©":"©","ª":"ª","«":"«","¬":"¬","­":"­","®":"®","¯":"¯","°":"°","±":"±","²":"²","³":"³","´":"´","µ":"µ","¶":"¶","·":"·","¸":"¸","¹":"¹","º":"º","»":"»","¼":"¼","½":"½","¾":"¾","¿":"¿","À":"À","Ã":"Á","Â":"Â","Ã":"Ã","Ä":"Ä","Ã…":"Å","Æ":"Æ","Ç":"Ç","È":"È","É":"É","Ê":"Ê","Ë":"Ë","ÃŒ":"Ì","Ã":"Í","ÃŽ":"Î","Ã":"Ï","Ã":"Ð","Ñ":"Ñ","Ã’":"Ò","Ó":"Ó","Ô":"Ô","Õ":"Õ","Ö":"Ö","×":"×","Ø":"Ø","Ù":"Ù","Ú":"Ú","Û":"Û","Ü":"Ü","Ã":"Ý","Þ":"Þ","ß":"ß","à":"à","á":"á","â":"â","ã":"ã","ä":"ä","Ã¥":"å","æ":"æ","ç":"ç","è":"è","é":"é","ê":"ê","ë":"ë","ì":"ì","í":"í","î":"î","ï":"ï","ð":"ð","ñ":"ñ","ò":"ò","ó":"ó","ô":"ô","õ":"õ","ö":"ö","÷":"÷","ø":"ø","ù":"ù","ú":"ú","û":"û","ü":"ü","ý":"ý","þ":"þ","ÿ":"ÿ",'"':""","&":"&","<":"<",">":">","Å’":"Œ","Å“":"œ","Å ":"Š","Å¡":"š","Ÿ":"Ÿ","ˆ":"ˆ","Ëœ":"˜"," ":" "," ":" "," ":" ","‌":"‌","â€":"‍","‎":"‎","â€":"‏","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","â€":"”","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","Æ’":"ƒ","Α":"Α","Î’":"Β","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Î":"Ν","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Î¥":"Υ","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","Ï€":"π","Ï":"ρ","Ï‚":"ς","σ":"σ","Ï„":"τ","Ï…":"υ","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","Ï‘":"ϑ","Ï’":"ϒ","Ï–":"ϖ","•":"•","…":"…","′":"′","″":"″","‾":"‾","â„":"⁄","℘":"℘","â„‘":"ℑ","ℜ":"ℜ","â„¢":"™","ℵ":"ℵ","â†":"←","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","â‡":"⇐","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","âˆ":"∏","∑":"∑","−":"−","∗":"∗","√":"√","âˆ":"∝","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","â‹…":"⋅","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","〈":"⟨","〉":"⟩","â—Š":"◊","â™ ":"♠","♣":"♣","♥":"♥","♦":"♦"}},html5:{entities:{"Æ":"Æ","Æ":"Æ","&":"&","&":"&","Á":"Ã","Á":"Ã","Ă":"Ä‚","Â":"Â","Â":"Â","А":"Ð","𝔄":"ð”„","À":"À","À":"À","Α":"Α","Ā":"Ä€","⩓":"â©“","Ą":"Ä„","𝔸":"ð”¸","⁡":"â¡","Å":"Ã…","Å":"Ã…","𝒜":"ð’œ","≔":"≔","Ã":"Ã","Ã":"Ã","Ä":"Ä","Ä":"Ä","∖":"∖","⫧":"â«§","⌆":"⌆","Б":"Б","∵":"∵","ℬ":"ℬ","Β":"Î’","𝔅":"ð”…","𝔹":"ð”¹","˘":"˘","ℬ":"ℬ","≎":"≎","Ч":"Ч","©":"©","©":"©","Ć":"Ć","⋒":"â‹’","ⅅ":"â……","ℭ":"â„­","Č":"ÄŒ","Ç":"Ç","Ç":"Ç","Ĉ":"Ĉ","∰":"∰","Ċ":"ÄŠ","¸":"¸","·":"·","ℭ":"â„­","Χ":"Χ","⊙":"⊙","⊖":"⊖","⊕":"⊕","⊗":"⊗","∲":"∲","”":"â€","’":"’","∷":"∷","⩴":"â©´","≡":"≡","∯":"∯","∮":"∮","ℂ":"â„‚","∐":"âˆ","∳":"∳","⨯":"⨯","𝒞":"ð’ž","⋓":"â‹“","≍":"â‰","ⅅ":"â……","⤑":"⤑","Ђ":"Ђ","Ѕ":"Ð…","Џ":"Ð","‡":"‡","↡":"↡","⫤":"⫤","Ď":"ÄŽ","Д":"Д","∇":"∇","Δ":"Δ","𝔇":"ð”‡","´":"´","˙":"Ë™","˝":"Ë","`":"`","˜":"Ëœ","⋄":"â‹„","ⅆ":"â…†","𝔻":"ð”»","¨":"¨","⃜":"⃜","≐":"â‰","∯":"∯","¨":"¨","⇓":"⇓","⇐":"â‡","⇔":"⇔","⫤":"⫤","⟸":"⟸","⟺":"⟺","⟹":"⟹","⇒":"⇒","⊨":"⊨","⇑":"⇑","⇕":"⇕","∥":"∥","↓":"↓","⤓":"⤓","⇵":"⇵","̑":"Ì‘","⥐":"â¥","⥞":"⥞","↽":"↽","⥖":"⥖","⥟":"⥟","⇁":"â‡","⥗":"⥗","⊤":"⊤","↧":"↧","⇓":"⇓","𝒟":"ð’Ÿ","Đ":"Ä","Ŋ":"ÅŠ","Ð":"Ã","Ð":"Ã","É":"É","É":"É","Ě":"Äš","Ê":"Ê","Ê":"Ê","Э":"Э","Ė":"Ä–","𝔈":"ð”ˆ","È":"È","È":"È","∈":"∈","Ē":"Ä’","◻":"â—»","▫":"â–«","Ę":"Ę","𝔼":"ð”¼","Ε":"Ε","⩵":"⩵","≂":"≂","⇌":"⇌","ℰ":"â„°","⩳":"⩳","Η":"Η","Ë":"Ë","Ë":"Ë","∃":"∃","ⅇ":"â…‡","Ф":"Ф","𝔉":"ð”‰","◼":"â—¼","▪":"â–ª","𝔽":"ð”½","∀":"∀","ℱ":"ℱ","ℱ":"ℱ","Ѓ":"Ѓ",">":">",">":">","Γ":"Γ","Ϝ":"Ïœ","Ğ":"Äž","Ģ":"Ä¢","Ĝ":"Äœ","Г":"Г","Ġ":"Ä ","𝔊":"ð”Š","⋙":"â‹™","𝔾":"ð”¾","≥":"≥","⋛":"â‹›","≧":"≧","⪢":"⪢","≷":"≷","⩾":"⩾","≳":"≳","𝒢":"ð’¢","≫":"≫","Ъ":"Ъ","ˇ":"ˇ","^":"^","Ĥ":"Ĥ","ℌ":"ℌ","ℋ":"â„‹","ℍ":"â„","─":"─","ℋ":"â„‹","Ħ":"Ħ","≎":"≎","≏":"â‰","Е":"Е","IJ":"IJ","Ё":"Ð","Í":"Ã","Í":"Ã","Î":"ÃŽ","Î":"ÃŽ","И":"И","İ":"İ","ℑ":"â„‘","Ì":"ÃŒ","Ì":"ÃŒ","ℑ":"â„‘","Ī":"Ī","ⅈ":"â…ˆ","⇒":"⇒","∬":"∬","∫":"∫","⋂":"â‹‚","⁣":"â£","⁢":"â¢","Į":"Ä®","𝕀":"ð•€","Ι":"Ι","ℐ":"â„","Ĩ":"Ĩ","І":"І","Ï":"Ã","Ï":"Ã","Ĵ":"Ä´","Й":"Й","𝔍":"ð”","𝕁":"ð•","𝒥":"ð’¥","Ј":"Ј","Є":"Є","Х":"Ð¥","Ќ":"ÐŒ","Κ":"Κ","Ķ":"Ķ","К":"К","𝔎":"ð”Ž","𝕂":"ð•‚","𝒦":"ð’¦","Љ":"Љ","<":"<","<":"<","Ĺ":"Ĺ","Λ":"Λ","⟪":"⟪","ℒ":"â„’","↞":"↞","Ľ":"Ľ","Ļ":"Ä»","Л":"Л","⟨":"⟨","←":"â†","⇤":"⇤","⇆":"⇆","⌈":"⌈","⟦":"⟦","⥡":"⥡","⇃":"⇃","⥙":"⥙","⌊":"⌊","↔":"↔","⥎":"⥎","⊣":"⊣","↤":"↤","⥚":"⥚","⊲":"⊲","⧏":"â§","⊴":"⊴","⥑":"⥑","⥠":"⥠","↿":"↿","⥘":"⥘","↼":"↼","⥒":"⥒","⇐":"â‡","⇔":"⇔","⋚":"⋚","≦":"≦","≶":"≶","⪡":"⪡","⩽":"⩽","≲":"≲","𝔏":"ð”","⋘":"⋘","⇚":"⇚","Ŀ":"Ä¿","⟵":"⟵","⟷":"⟷","⟶":"⟶","⟸":"⟸","⟺":"⟺","⟹":"⟹","𝕃":"ð•ƒ","↙":"↙","↘":"↘","ℒ":"â„’","↰":"↰","Ł":"Å","≪":"≪","⤅":"⤅","М":"М"," ":"âŸ","ℳ":"ℳ","𝔐":"ð”","∓":"∓","𝕄":"ð•„","ℳ":"ℳ","Μ":"Μ","Њ":"Њ","Ń":"Ń","Ň":"Ň","Ņ":"Å…","Н":"Ð","​":"​","​":"​","​":"​","​":"​","≫":"≫","≪":"≪"," ":"\n","𝔑":"ð”‘","⁠":"â "," ":" ","ℕ":"â„•","⫬":"⫬","≢":"≢","≭":"≭","∦":"∦","∉":"∉","≠":"≠","≂̸":"≂̸","∄":"∄","≯":"≯","≱":"≱","≧̸":"≧̸","≫̸":"≫̸","≹":"≹","⩾̸":"⩾̸","≵":"≵","≎̸":"≎̸","≏̸":"â‰Ì¸","⋪":"⋪","⧏̸":"â§Ì¸","⋬":"⋬","≮":"≮","≰":"≰","≸":"≸","≪̸":"≪̸","⩽̸":"⩽̸","≴":"≴","⪢̸":"⪢̸","⪡̸":"⪡̸","⊀":"⊀","⪯̸":"⪯̸","⋠":"â‹ ","∌":"∌","⋫":"â‹«","⧐̸":"â§Ì¸","⋭":"â‹­","⊏̸":"âŠÌ¸","⋢":"â‹¢","⊐̸":"âŠÌ¸","⋣":"â‹£","⊂⃒":"⊂⃒","⊈":"⊈","⊁":"âŠ","⪰̸":"⪰̸","⋡":"â‹¡","≿̸":"≿̸","⊃⃒":"⊃⃒","⊉":"⊉","≁":"â‰","≄":"≄","≇":"≇","≉":"≉","∤":"∤","𝒩":"ð’©","Ñ":"Ñ","Ñ":"Ñ","Ν":"Î","Œ":"Å’","Ó":"Ó","Ó":"Ó","Ô":"Ô","Ô":"Ô","О":"О","Ő":"Å","𝔒":"ð”’","Ò":"Ã’","Ò":"Ã’","Ō":"ÅŒ","Ω":"Ω","Ο":"Ο","𝕆":"ð•†","“":"“","‘":"‘","⩔":"â©”","𝒪":"ð’ª","Ø":"Ø","Ø":"Ø","Õ":"Õ","Õ":"Õ","⨷":"⨷","Ö":"Ö","Ö":"Ö","‾":"‾","⏞":"âž","⎴":"⎴","⏜":"âœ","∂":"∂","П":"П","𝔓":"ð”“","Φ":"Φ","Π":"Π","±":"±","ℌ":"ℌ","ℙ":"â„™","⪻":"⪻","≺":"≺","⪯":"⪯","≼":"≼","≾":"≾","″":"″","∏":"âˆ","∷":"∷","∝":"âˆ","𝒫":"ð’«","Ψ":"Ψ",""":'"',""":'"',"𝔔":"ð””","ℚ":"ℚ","𝒬":"ð’¬","⤐":"â¤","®":"®","®":"®","Ŕ":"Å”","⟫":"⟫","↠":"↠","⤖":"⤖","Ř":"Ř","Ŗ":"Å–","Р":"Р","ℜ":"ℜ","∋":"∋","⇋":"⇋","⥯":"⥯","ℜ":"ℜ","Ρ":"Ρ","⟩":"⟩","→":"→","⇥":"⇥","⇄":"⇄","⌉":"⌉","⟧":"⟧","⥝":"â¥","⇂":"⇂","⥕":"⥕","⌋":"⌋","⊢":"⊢","↦":"↦","⥛":"⥛","⊳":"⊳","⧐":"â§","⊵":"⊵","⥏":"â¥","⥜":"⥜","↾":"↾","⥔":"⥔","⇀":"⇀","⥓":"⥓","⇒":"⇒","ℝ":"â„","⥰":"⥰","⇛":"⇛","ℛ":"â„›","↱":"↱","⧴":"â§´","Щ":"Щ","Ш":"Ш","Ь":"Ь","Ś":"Åš","⪼":"⪼","Š":"Å ","Ş":"Åž","Ŝ":"Åœ","С":"С","𝔖":"ð”–","↓":"↓","←":"â†","→":"→","↑":"↑","Σ":"Σ","∘":"∘","𝕊":"ð•Š","√":"√","□":"â–¡","⊓":"⊓","⊏":"âŠ","⊑":"⊑","⊐":"âŠ","⊒":"⊒","⊔":"⊔","𝒮":"ð’®","⋆":"⋆","⋐":"â‹","⋐":"â‹","⊆":"⊆","≻":"≻","⪰":"⪰","≽":"≽","≿":"≿","∋":"∋","∑":"∑","⋑":"â‹‘","⊃":"⊃","⊇":"⊇","⋑":"â‹‘","Þ":"Þ","Þ":"Þ","™":"â„¢","Ћ":"Ћ","Ц":"Ц"," ":"\t","Τ":"Τ","Ť":"Ť","Ţ":"Å¢","Т":"Т","𝔗":"ð”—","∴":"∴","Θ":"Θ","  ":"âŸâ€Š"," ":" ","∼":"∼","≃":"≃","≅":"≅","≈":"≈","𝕋":"ð•‹","⃛":"⃛","𝒯":"ð’¯","Ŧ":"Ŧ","Ú":"Ú","Ú":"Ú","↟":"↟","⥉":"⥉","Ў":"ÐŽ","Ŭ":"Ŭ","Û":"Û","Û":"Û","У":"У","Ű":"Ű","𝔘":"ð”˜","Ù":"Ù","Ù":"Ù","Ū":"Ū","_":"_","⏟":"âŸ","⎵":"⎵","⏝":"â","⋃":"⋃","⊎":"⊎","Ų":"Ų","𝕌":"ð•Œ","↑":"↑","⤒":"⤒","⇅":"⇅","↕":"↕","⥮":"⥮","⊥":"⊥","↥":"↥","⇑":"⇑","⇕":"⇕","↖":"↖","↗":"↗","ϒ":"Ï’","Υ":"Î¥","Ů":"Å®","𝒰":"ð’°","Ũ":"Ũ","Ü":"Ü","Ü":"Ü","⊫":"⊫","⫫":"â««","В":"Ð’","⊩":"⊩","⫦":"⫦","⋁":"â‹","‖":"‖","‖":"‖","∣":"∣","|":"|","❘":"â˜","≀":"≀"," ":" ","𝔙":"ð”™","𝕍":"ð•","𝒱":"ð’±","⊪":"⊪","Ŵ":"Å´","⋀":"â‹€","𝔚":"ð”š","𝕎":"ð•Ž","𝒲":"ð’²","𝔛":"ð”›","Ξ":"Ξ","𝕏":"ð•","𝒳":"ð’³","Я":"Я","Ї":"Ї","Ю":"Ю","Ý":"Ã","Ý":"Ã","Ŷ":"Ŷ","Ы":"Ы","𝔜":"ð”œ","𝕐":"ð•","𝒴":"ð’´","Ÿ":"Ÿ","Ж":"Ж","Ź":"Ź","Ž":"Ž","З":"З","Ż":"Å»","​":"​","Ζ":"Ζ","ℨ":"ℨ","ℤ":"ℤ","𝒵":"ð’µ","á":"á","á":"á","ă":"ă","∾":"∾","∾̳":"∾̳","∿":"∿","â":"â","â":"â","´":"´","´":"´","а":"а","æ":"æ","æ":"æ","⁡":"â¡","𝔞":"ð”ž","à":"à","à":"à","ℵ":"ℵ","ℵ":"ℵ","α":"α","ā":"Ä","⨿":"⨿","&":"&","&":"&","∧":"∧","⩕":"â©•","⩜":"⩜","⩘":"⩘","⩚":"⩚","∠":"∠","⦤":"⦤","∠":"∠","∡":"∡","⦨":"⦨","⦩":"⦩","⦪":"⦪","⦫":"⦫","⦬":"⦬","⦭":"⦭","⦮":"⦮","⦯":"⦯","∟":"∟","⊾":"⊾","⦝":"â¦","∢":"∢","Å":"Ã…","⍼":"â¼","ą":"Ä…","𝕒":"ð•’","≈":"≈","⩰":"â©°","⩯":"⩯","≊":"≊","≋":"≋","'":"'","≈":"≈","≊":"≊","å":"Ã¥","å":"Ã¥","𝒶":"ð’¶","*":"*","≈":"≈","≍":"â‰","ã":"ã","ã":"ã","ä":"ä","ä":"ä","∳":"∳","⨑":"⨑","⫭":"â«­","≌":"≌","϶":"϶","‵":"‵","∽":"∽","⋍":"â‹","⊽":"⊽","⌅":"⌅","⌅":"⌅","⎵":"⎵","⎶":"⎶","≌":"≌","б":"б","„":"„","∵":"∵","∵":"∵","⦰":"⦰","϶":"϶","ℬ":"ℬ","β":"β","ℶ":"â„¶","≬":"≬","𝔟":"ð”Ÿ","⋂":"â‹‚","◯":"â—¯","⋃":"⋃","⨀":"⨀","⨁":"â¨","⨂":"⨂","⨆":"⨆","★":"★","▽":"â–½","△":"â–³","⨄":"⨄","⋁":"â‹","⋀":"â‹€","⤍":"â¤","⧫":"â§«","▪":"â–ª","▴":"â–´","▾":"â–¾","◂":"â—‚","▸":"â–¸","␣":"â£","▒":"â–’","░":"â–‘","▓":"â–“","█":"â–ˆ","=⃥":"=⃥","≡⃥":"≡⃥","⌐":"âŒ","𝕓":"ð•“","⊥":"⊥","⊥":"⊥","⋈":"⋈","╗":"â•—","╔":"â•”","╖":"â•–","╓":"â•“","═":"â•","╦":"╦","╩":"â•©","╤":"╤","╧":"â•§","╝":"â•","╚":"╚","╜":"╜","╙":"â•™","║":"â•‘","╬":"╬","╣":"â•£","╠":"â• ","╫":"â•«","╢":"â•¢","╟":"╟","⧉":"⧉","╕":"â••","╒":"â•’","┐":"â”","┌":"┌","─":"─","╥":"â•¥","╨":"╨","┬":"┬","┴":"â”´","⊟":"⊟","⊞":"⊞","⊠":"⊠","╛":"â•›","╘":"╘","┘":"┘","└":"â””","│":"│","╪":"╪","╡":"â•¡","╞":"╞","┼":"┼","┤":"┤","├":"├","‵":"‵","˘":"˘","¦":"¦","¦":"¦","𝒷":"ð’·","⁏":"â","∽":"∽","⋍":"â‹","\":"\\","⧅":"â§…","⟈":"⟈","•":"•","•":"•","≎":"≎","⪮":"⪮","≏":"â‰","≏":"â‰","ć":"ć","∩":"∩","⩄":"â©„","⩉":"⩉","⩋":"â©‹","⩇":"⩇","⩀":"â©€","∩︀":"∩︀","⁁":"â","ˇ":"ˇ","⩍":"â©","č":"Ä","ç":"ç","ç":"ç","ĉ":"ĉ","⩌":"⩌","⩐":"â©","ċ":"Ä‹","¸":"¸","¸":"¸","⦲":"⦲","¢":"¢","¢":"¢","·":"·","𝔠":"ð” ","ч":"ч","✓":"✓","✓":"✓","χ":"χ","○":"â—‹","⧃":"⧃","ˆ":"ˆ","≗":"≗","↺":"↺","↻":"↻","®":"®","Ⓢ":"Ⓢ","⊛":"⊛","⊚":"⊚","⊝":"âŠ","≗":"≗","⨐":"â¨","⫯":"⫯","⧂":"â§‚","♣":"♣","♣":"♣",":":":","≔":"≔","≔":"≔",",":",","@":"@","∁":"âˆ","∘":"∘","∁":"âˆ","ℂ":"â„‚","≅":"≅","⩭":"â©­","∮":"∮","𝕔":"ð•”","∐":"âˆ","©":"©","©":"©","℗":"â„—","↵":"↵","✗":"✗","𝒸":"ð’¸","⫏":"â«","⫑":"â«‘","⫐":"â«","⫒":"â«’","⋯":"⋯","⤸":"⤸","⤵":"⤵","⋞":"⋞","⋟":"⋟","↶":"↶","⤽":"⤽","∪":"∪","⩈":"⩈","⩆":"⩆","⩊":"⩊","⊍":"âŠ","⩅":"â©…","∪︀":"∪︀","↷":"↷","⤼":"⤼","⋞":"⋞","⋟":"⋟","⋎":"⋎","⋏":"â‹","¤":"¤","¤":"¤","↶":"↶","↷":"↷","⋎":"⋎","⋏":"â‹","∲":"∲","∱":"∱","⌭":"⌭","⇓":"⇓","⥥":"⥥","†":"†","ℸ":"ℸ","↓":"↓","‐":"â€","⊣":"⊣","⤏":"â¤","˝":"Ë","ď":"Ä","д":"д","ⅆ":"â…†","‡":"‡","⇊":"⇊","⩷":"â©·","°":"°","°":"°","δ":"δ","⦱":"⦱","⥿":"⥿","𝔡":"ð”¡","⇃":"⇃","⇂":"⇂","⋄":"â‹„","⋄":"â‹„","♦":"♦","♦":"♦","¨":"¨","ϝ":"Ï","⋲":"⋲","÷":"÷","÷":"÷","÷":"÷","⋇":"⋇","⋇":"⋇","ђ":"Ñ’","⌞":"⌞","⌍":"âŒ","$":"$","𝕕":"ð••","˙":"Ë™","≐":"â‰","≑":"≑","∸":"∸","∔":"∔","⊡":"⊡","⌆":"⌆","↓":"↓","⇊":"⇊","⇃":"⇃","⇂":"⇂","⤐":"â¤","⌟":"⌟","⌌":"⌌","𝒹":"ð’¹","ѕ":"Ñ•","⧶":"â§¶","đ":"Ä‘","⋱":"⋱","▿":"â–¿","▾":"â–¾","⇵":"⇵","⥯":"⥯","⦦":"⦦","џ":"ÑŸ","⟿":"⟿","⩷":"â©·","≑":"≑","é":"é","é":"é","⩮":"â©®","ě":"Ä›","≖":"≖","ê":"ê","ê":"ê","≕":"≕","э":"Ñ","ė":"Ä—","ⅇ":"â…‡","≒":"≒","𝔢":"ð”¢","⪚":"⪚","è":"è","è":"è","⪖":"⪖","⪘":"⪘","⪙":"⪙","⏧":"â§","ℓ":"â„“","⪕":"⪕","⪗":"⪗","ē":"Ä“","∅":"∅","∅":"∅","∅":"∅"," ":" "," ":" "," ":" ","ŋ":"Å‹"," ":" ","ę":"Ä™","𝕖":"ð•–","⋕":"â‹•","⧣":"â§£","⩱":"⩱","ε":"ε","ε":"ε","ϵ":"ϵ","≖":"≖","≕":"≕","≂":"≂","⪖":"⪖","⪕":"⪕","=":"=","≟":"≟","≡":"≡","⩸":"⩸","⧥":"â§¥","≓":"≓","⥱":"⥱","ℯ":"ℯ","≐":"â‰","≂":"≂","η":"η","ð":"ð","ð":"ð","ë":"ë","ë":"ë","€":"€","!":"!","∃":"∃","ℰ":"â„°","ⅇ":"â…‡","≒":"≒","ф":"Ñ„","♀":"♀","ffi":"ffi","ff":"ff","ffl":"ffl","𝔣":"ð”£","fi":"ï¬","fj":"fj","♭":"â™­","fl":"fl","▱":"â–±","ƒ":"Æ’","𝕗":"ð•—","∀":"∀","⋔":"â‹”","⫙":"â«™","⨍":"â¨","½":"½","½":"½","⅓":"â…“","¼":"¼","¼":"¼","⅕":"â…•","⅙":"â…™","⅛":"â…›","⅔":"â…”","⅖":"â…–","¾":"¾","¾":"¾","⅗":"â…—","⅜":"â…œ","⅘":"â…˜","⅚":"â…š","⅝":"â…","⅞":"â…ž","⁄":"â„","⌢":"⌢","𝒻":"ð’»","≧":"≧","⪌":"⪌","ǵ":"ǵ","γ":"γ","ϝ":"Ï","⪆":"⪆","ğ":"ÄŸ","ĝ":"Ä","г":"г","ġ":"Ä¡","≥":"≥","⋛":"â‹›","≥":"≥","≧":"≧","⩾":"⩾","⩾":"⩾","⪩":"⪩","⪀":"⪀","⪂":"⪂","⪄":"⪄","⋛︀":"⋛︀","⪔":"⪔","𝔤":"ð”¤","≫":"≫","⋙":"â‹™","ℷ":"â„·","ѓ":"Ñ“","≷":"≷","⪒":"⪒","⪥":"⪥","⪤":"⪤","≩":"≩","⪊":"⪊","⪊":"⪊","⪈":"⪈","⪈":"⪈","≩":"≩","⋧":"â‹§","𝕘":"ð•˜","`":"`","ℊ":"ℊ","≳":"≳","⪎":"⪎","⪐":"âª",">":">",">":">","⪧":"⪧","⩺":"⩺","⋗":"â‹—","⦕":"⦕","⩼":"⩼","⪆":"⪆","⥸":"⥸","⋗":"â‹—","⋛":"â‹›","⪌":"⪌","≷":"≷","≳":"≳","≩︀":"≩︀","≩︀":"≩︀","⇔":"⇔"," ":" ","½":"½","ℋ":"â„‹","ъ":"ÑŠ","↔":"↔","⥈":"⥈","↭":"↭","ℏ":"â„","ĥ":"Ä¥","♥":"♥","♥":"♥","…":"…","⊹":"⊹","𝔥":"ð”¥","⤥":"⤥","⤦":"⤦","⇿":"⇿","∻":"∻","↩":"↩","↪":"↪","𝕙":"ð•™","―":"―","𝒽":"ð’½","ℏ":"â„","ħ":"ħ","⁃":"âƒ","‐":"â€","í":"í","í":"í","⁣":"â£","î":"î","î":"î","и":"и","е":"е","¡":"¡","¡":"¡","⇔":"⇔","𝔦":"ð”¦","ì":"ì","ì":"ì","ⅈ":"â…ˆ","⨌":"⨌","∭":"∭","⧜":"â§œ","℩":"â„©","ij":"ij","ī":"Ä«","ℑ":"â„‘","ℐ":"â„","ℑ":"â„‘","ı":"ı","⊷":"⊷","Ƶ":"Ƶ","∈":"∈","℅":"â„…","∞":"∞","⧝":"â§","ı":"ı","∫":"∫","⊺":"⊺","ℤ":"ℤ","⊺":"⊺","⨗":"⨗","⨼":"⨼","ё":"Ñ‘","į":"į","𝕚":"ð•š","ι":"ι","⨼":"⨼","¿":"¿","¿":"¿","𝒾":"ð’¾","∈":"∈","⋹":"⋹","⋵":"⋵","⋴":"â‹´","⋳":"⋳","∈":"∈","⁢":"â¢","ĩ":"Ä©","і":"Ñ–","ï":"ï","ï":"ï","ĵ":"ĵ","й":"й","𝔧":"ð”§","ȷ":"È·","𝕛":"ð•›","𝒿":"ð’¿","ј":"ј","є":"Ñ”","κ":"κ","ϰ":"ϰ","ķ":"Ä·","к":"к","𝔨":"ð”¨","ĸ":"ĸ","х":"Ñ…","ќ":"Ñœ","𝕜":"ð•œ","𝓀":"ð“€","⇚":"⇚","⇐":"â‡","⤛":"⤛","⤎":"⤎","≦":"≦","⪋":"⪋","⥢":"⥢","ĺ":"ĺ","⦴":"⦴","ℒ":"â„’","λ":"λ","⟨":"⟨","⦑":"⦑","⟨":"⟨","⪅":"⪅","«":"«","«":"«","←":"â†","⇤":"⇤","⤟":"⤟","⤝":"â¤","↩":"↩","↫":"↫","⤹":"⤹","⥳":"⥳","↢":"↢","⪫":"⪫","⤙":"⤙","⪭":"⪭","⪭︀":"⪭︀","⤌":"⤌","❲":"â²","{":"{","[":"[","⦋":"⦋","⦏":"â¦","⦍":"â¦","ľ":"ľ","ļ":"ļ","⌈":"⌈","{":"{","л":"л","⤶":"⤶","“":"“","„":"„","⥧":"⥧","⥋":"⥋","↲":"↲","≤":"≤","←":"â†","↢":"↢","↽":"↽","↼":"↼","⇇":"⇇","↔":"↔","⇆":"⇆","⇋":"⇋","↭":"↭","⋋":"â‹‹","⋚":"⋚","≤":"≤","≦":"≦","⩽":"⩽","⩽":"⩽","⪨":"⪨","⩿":"â©¿","⪁":"âª","⪃":"⪃","⋚︀":"⋚︀","⪓":"⪓","⪅":"⪅","⋖":"â‹–","⋚":"⋚","⪋":"⪋","≶":"≶","≲":"≲","⥼":"⥼","⌊":"⌊","𝔩":"ð”©","≶":"≶","⪑":"⪑","↽":"↽","↼":"↼","⥪":"⥪","▄":"â–„","љ":"Ñ™","≪":"≪","⇇":"⇇","⌞":"⌞","⥫":"⥫","◺":"â—º","ŀ":"Å€","⎰":"⎰","⎰":"⎰","≨":"≨","⪉":"⪉","⪉":"⪉","⪇":"⪇","⪇":"⪇","≨":"≨","⋦":"⋦","⟬":"⟬","⇽":"⇽","⟦":"⟦","⟵":"⟵","⟷":"⟷","⟼":"⟼","⟶":"⟶","↫":"↫","↬":"↬","⦅":"⦅","𝕝":"ð•","⨭":"⨭","⨴":"⨴","∗":"∗","_":"_","◊":"â—Š","◊":"â—Š","⧫":"â§«","(":"(","⦓":"⦓","⇆":"⇆","⌟":"⌟","⇋":"⇋","⥭":"⥭","‎":"‎","⊿":"⊿","‹":"‹","𝓁":"ð“","↰":"↰","≲":"≲","⪍":"âª","⪏":"âª","[":"[","‘":"‘","‚":"‚","ł":"Å‚","<":"<","<":"<","⪦":"⪦","⩹":"⩹","⋖":"â‹–","⋋":"â‹‹","⋉":"⋉","⥶":"⥶","⩻":"â©»","⦖":"⦖","◃":"â—ƒ","⊴":"⊴","◂":"â—‚","⥊":"⥊","⥦":"⥦","≨︀":"≨︀","≨︀":"≨︀","∺":"∺","¯":"¯","¯":"¯","♂":"♂","✠":"✠","✠":"✠","↦":"↦","↦":"↦","↧":"↧","↤":"↤","↥":"↥","▮":"â–®","⨩":"⨩","м":"м","—":"—","∡":"∡","𝔪":"ð”ª","℧":"â„§","µ":"µ","µ":"µ","∣":"∣","*":"*","⫰":"â«°","·":"·","·":"·","−":"−","⊟":"⊟","∸":"∸","⨪":"⨪","⫛":"â«›","…":"…","∓":"∓","⊧":"⊧","𝕞":"ð•ž","∓":"∓","𝓂":"ð“‚","∾":"∾","μ":"μ","⊸":"⊸","⊸":"⊸","⋙̸":"⋙̸","≫⃒":"≫⃒","≫̸":"≫̸","⇍":"â‡","⇎":"⇎","⋘̸":"⋘̸","≪⃒":"≪⃒","≪̸":"≪̸","⇏":"â‡","⊯":"⊯","⊮":"⊮","∇":"∇","ń":"Å„","∠⃒":"∠⃒","≉":"≉","⩰̸":"⩰̸","≋̸":"≋̸","ʼn":"ʼn","≉":"≉","♮":"â™®","♮":"â™®","ℕ":"â„•"," ":" "," ":" ","≎̸":"≎̸","≏̸":"â‰Ì¸","⩃":"⩃","ň":"ň","ņ":"ņ","≇":"≇","⩭̸":"⩭̸","⩂":"â©‚","н":"н","–":"–","≠":"≠","⇗":"⇗","⤤":"⤤","↗":"↗","↗":"↗","≐̸":"â‰Ì¸","≢":"≢","⤨":"⤨","≂̸":"≂̸","∄":"∄","∄":"∄","𝔫":"ð”«","≧̸":"≧̸","≱":"≱","≱":"≱","≧̸":"≧̸","⩾̸":"⩾̸","⩾̸":"⩾̸","≵":"≵","≯":"≯","≯":"≯","⇎":"⇎","↮":"↮","⫲":"⫲","∋":"∋","⋼":"⋼","⋺":"⋺","∋":"∋","њ":"Ñš","⇍":"â‡","≦̸":"≦̸","↚":"↚","‥":"‥","≰":"≰","↚":"↚","↮":"↮","≰":"≰","≦̸":"≦̸","⩽̸":"⩽̸","⩽̸":"⩽̸","≮":"≮","≴":"≴","≮":"≮","⋪":"⋪","⋬":"⋬","∤":"∤","𝕟":"ð•Ÿ","¬":"¬","¬":"¬","∉":"∉","⋹̸":"⋹̸","⋵̸":"⋵̸","∉":"∉","⋷":"â‹·","⋶":"â‹¶","∌":"∌","∌":"∌","⋾":"⋾","⋽":"⋽","∦":"∦","∦":"∦","⫽⃥":"⫽⃥","∂̸":"∂̸","⨔":"⨔","⊀":"⊀","⋠":"â‹ ","⪯̸":"⪯̸","⊀":"⊀","⪯̸":"⪯̸","⇏":"â‡","↛":"↛","⤳̸":"⤳̸","↝̸":"â†Ì¸","↛":"↛","⋫":"â‹«","⋭":"â‹­","⊁":"âŠ","⋡":"â‹¡","⪰̸":"⪰̸","𝓃":"ð“ƒ","∤":"∤","∦":"∦","≁":"â‰","≄":"≄","≄":"≄","∤":"∤","∦":"∦","⋢":"â‹¢","⋣":"â‹£","⊄":"⊄","⫅̸":"⫅̸","⊈":"⊈","⊂⃒":"⊂⃒","⊈":"⊈","⫅̸":"⫅̸","⊁":"âŠ","⪰̸":"⪰̸","⊅":"⊅","⫆̸":"⫆̸","⊉":"⊉","⊃⃒":"⊃⃒","⊉":"⊉","⫆̸":"⫆̸","≹":"≹","ñ":"ñ","ñ":"ñ","≸":"≸","⋪":"⋪","⋬":"⋬","⋫":"â‹«","⋭":"â‹­","ν":"ν","#":"#","№":"â„–"," ":" ","⊭":"⊭","⤄":"⤄","≍⃒":"â‰âƒ’","⊬":"⊬","≥⃒":"≥⃒",">⃒":">⃒","⧞":"â§ž","⤂":"⤂","≤⃒":"≤⃒","<⃒":"<⃒","⊴⃒":"⊴⃒","⤃":"⤃","⊵⃒":"⊵⃒","∼⃒":"∼⃒","⇖":"⇖","⤣":"⤣","↖":"↖","↖":"↖","⤧":"⤧","Ⓢ":"Ⓢ","ó":"ó","ó":"ó","⊛":"⊛","⊚":"⊚","ô":"ô","ô":"ô","о":"о","⊝":"âŠ","ő":"Å‘","⨸":"⨸","⊙":"⊙","⦼":"⦼","œ":"Å“","⦿":"⦿","𝔬":"ð”¬","˛":"Ë›","ò":"ò","ò":"ò","⧁":"â§","⦵":"⦵","Ω":"Ω","∮":"∮","↺":"↺","⦾":"⦾","⦻":"⦻","‾":"‾","⧀":"â§€","ō":"Å","ω":"ω","ο":"ο","⦶":"⦶","⊖":"⊖","𝕠":"ð• ","⦷":"⦷","⦹":"⦹","⊕":"⊕","∨":"∨","↻":"↻","⩝":"â©","ℴ":"â„´","ℴ":"â„´","ª":"ª","ª":"ª","º":"º","º":"º","⊶":"⊶","⩖":"â©–","⩗":"â©—","⩛":"â©›","ℴ":"â„´","ø":"ø","ø":"ø","⊘":"⊘","õ":"õ","õ":"õ","⊗":"⊗","⨶":"⨶","ö":"ö","ö":"ö","⌽":"⌽","∥":"∥","¶":"¶","¶":"¶","∥":"∥","⫳":"⫳","⫽":"⫽","∂":"∂","п":"п","%":"%",".":".","‰":"‰","⊥":"⊥","‱":"‱","𝔭":"ð”­","φ":"φ","ϕ":"Ï•","ℳ":"ℳ","☎":"☎","π":"Ï€","⋔":"â‹”","ϖ":"Ï–","ℏ":"â„","ℎ":"ℎ","ℏ":"â„","+":"+","⨣":"⨣","⊞":"⊞","⨢":"⨢","∔":"∔","⨥":"⨥","⩲":"⩲","±":"±","±":"±","⨦":"⨦","⨧":"⨧","±":"±","⨕":"⨕","𝕡":"ð•¡","£":"£","£":"£","≺":"≺","⪳":"⪳","⪷":"⪷","≼":"≼","⪯":"⪯","≺":"≺","⪷":"⪷","≼":"≼","⪯":"⪯","⪹":"⪹","⪵":"⪵","⋨":"⋨","≾":"≾","′":"′","ℙ":"â„™","⪵":"⪵","⪹":"⪹","⋨":"⋨","∏":"âˆ","⌮":"⌮","⌒":"⌒","⌓":"⌓","∝":"âˆ","∝":"âˆ","≾":"≾","⊰":"⊰","𝓅":"ð“…","ψ":"ψ"," ":" ","𝔮":"ð”®","⨌":"⨌","𝕢":"ð•¢","⁗":"â—","𝓆":"ð“†","ℍ":"â„","⨖":"⨖","?":"?","≟":"≟",""":'"',""":'"',"⇛":"⇛","⇒":"⇒","⤜":"⤜","⤏":"â¤","⥤":"⥤","∽̱":"∽̱","ŕ":"Å•","√":"√","⦳":"⦳","⟩":"⟩","⦒":"⦒","⦥":"⦥","⟩":"⟩","»":"»","»":"»","→":"→","⥵":"⥵","⇥":"⇥","⤠":"⤠","⤳":"⤳","⤞":"⤞","↪":"↪","↬":"↬","⥅":"⥅","⥴":"⥴","↣":"↣","↝":"â†","⤚":"⤚","∶":"∶","ℚ":"ℚ","⤍":"â¤","❳":"â³","}":"}","]":"]","⦌":"⦌","⦎":"⦎","⦐":"â¦","ř":"Å™","ŗ":"Å—","⌉":"⌉","}":"}","р":"Ñ€","⤷":"⤷","⥩":"⥩","”":"â€","”":"â€","↳":"↳","ℜ":"ℜ","ℛ":"â„›","ℜ":"ℜ","ℝ":"â„","▭":"â–­","®":"®","®":"®","⥽":"⥽","⌋":"⌋","𝔯":"ð”¯","⇁":"â‡","⇀":"⇀","⥬":"⥬","ρ":"Ï","ϱ":"ϱ","→":"→","↣":"↣","⇁":"â‡","⇀":"⇀","⇄":"⇄","⇌":"⇌","⇉":"⇉","↝":"â†","⋌":"⋌","˚":"Ëš","≓":"≓","⇄":"⇄","⇌":"⇌","‏":"â€","⎱":"⎱","⎱":"⎱","⫮":"â«®","⟭":"⟭","⇾":"⇾","⟧":"⟧","⦆":"⦆","𝕣":"ð•£","⨮":"⨮","⨵":"⨵",")":")","⦔":"⦔","⨒":"⨒","⇉":"⇉","›":"›","𝓇":"ð“‡","↱":"↱","]":"]","’":"’","’":"’","⋌":"⋌","⋊":"⋊","▹":"â–¹","⊵":"⊵","▸":"â–¸","⧎":"â§Ž","⥨":"⥨","℞":"℞","ś":"Å›","‚":"‚","≻":"≻","⪴":"⪴","⪸":"⪸","š":"Å¡","≽":"≽","⪰":"⪰","ş":"ÅŸ","ŝ":"Å","⪶":"⪶","⪺":"⪺","⋩":"â‹©","⨓":"⨓","≿":"≿","с":"Ñ","⋅":"â‹…","⊡":"⊡","⩦":"⩦","⇘":"⇘","⤥":"⤥","↘":"↘","↘":"↘","§":"§","§":"§",";":";","⤩":"⤩","∖":"∖","∖":"∖","✶":"✶","𝔰":"ð”°","⌢":"⌢","♯":"♯","щ":"щ","ш":"ш","∣":"∣","∥":"∥","­":"­","­":"­","σ":"σ","ς":"Ï‚","ς":"Ï‚","∼":"∼","⩪":"⩪","≃":"≃","≃":"≃","⪞":"⪞","⪠":"⪠","⪝":"âª","⪟":"⪟","≆":"≆","⨤":"⨤","⥲":"⥲","←":"â†","∖":"∖","⨳":"⨳","⧤":"⧤","∣":"∣","⌣":"⌣","⪪":"⪪","⪬":"⪬","⪬︀":"⪬︀","ь":"ÑŒ","/":"/","⧄":"â§„","⌿":"⌿","𝕤":"ð•¤","♠":"â™ ","♠":"â™ ","∥":"∥","⊓":"⊓","⊓︀":"⊓︀","⊔":"⊔","⊔︀":"⊔︀","⊏":"âŠ","⊑":"⊑","⊏":"âŠ","⊑":"⊑","⊐":"âŠ","⊒":"⊒","⊐":"âŠ","⊒":"⊒","□":"â–¡","□":"â–¡","▪":"â–ª","▪":"â–ª","→":"→","𝓈":"ð“ˆ","∖":"∖","⌣":"⌣","⋆":"⋆","☆":"☆","★":"★","ϵ":"ϵ","ϕ":"Ï•","¯":"¯","⊂":"⊂","⫅":"â«…","⪽":"⪽","⊆":"⊆","⫃":"⫃","⫁":"â«","⫋":"â«‹","⊊":"⊊","⪿":"⪿","⥹":"⥹","⊂":"⊂","⊆":"⊆","⫅":"â«…","⊊":"⊊","⫋":"â«‹","⫇":"⫇","⫕":"â«•","⫓":"â«“","≻":"≻","⪸":"⪸","≽":"≽","⪰":"⪰","⪺":"⪺","⪶":"⪶","⋩":"â‹©","≿":"≿","∑":"∑","♪":"♪","¹":"¹","¹":"¹","²":"²","²":"²","³":"³","³":"³","⊃":"⊃","⫆":"⫆","⪾":"⪾","⫘":"⫘","⊇":"⊇","⫄":"â«„","⟉":"⟉","⫗":"â«—","⥻":"⥻","⫂":"â«‚","⫌":"⫌","⊋":"⊋","⫀":"â«€","⊃":"⊃","⊇":"⊇","⫆":"⫆","⊋":"⊋","⫌":"⫌","⫈":"⫈","⫔":"â«”","⫖":"â«–","⇙":"⇙","⤦":"⤦","↙":"↙","↙":"↙","⤪":"⤪","ß":"ß","ß":"ß","⌖":"⌖","τ":"Ï„","⎴":"⎴","ť":"Å¥","ţ":"Å£","т":"Ñ‚","⃛":"⃛","⌕":"⌕","𝔱":"ð”±","∴":"∴","∴":"∴","θ":"θ","ϑ":"Ï‘","ϑ":"Ï‘","≈":"≈","∼":"∼"," ":" ","≈":"≈","∼":"∼","þ":"þ","þ":"þ","˜":"Ëœ","×":"×","×":"×","⊠":"⊠","⨱":"⨱","⨰":"⨰","∭":"∭","⤨":"⤨","⊤":"⊤","⌶":"⌶","⫱":"⫱","𝕥":"ð•¥","⫚":"⫚","⤩":"⤩","‴":"‴","™":"â„¢","▵":"â–µ","▿":"â–¿","◃":"â—ƒ","⊴":"⊴","≜":"≜","▹":"â–¹","⊵":"⊵","◬":"â—¬","≜":"≜","⨺":"⨺","⨹":"⨹","⧍":"â§","⨻":"⨻","⏢":"â¢","𝓉":"ð“‰","ц":"ц","ћ":"Ñ›","ŧ":"ŧ","≬":"≬","↞":"↞","↠":"↠","⇑":"⇑","⥣":"⥣","ú":"ú","ú":"ú","↑":"↑","ў":"Ñž","ŭ":"Å­","û":"û","û":"û","у":"у","⇅":"⇅","ű":"ű","⥮":"⥮","⥾":"⥾","𝔲":"ð”²","ù":"ù","ù":"ù","↿":"↿","↾":"↾","▀":"â–€","⌜":"⌜","⌜":"⌜","⌏":"âŒ","◸":"â—¸","ū":"Å«","¨":"¨","¨":"¨","ų":"ų","𝕦":"ð•¦","↑":"↑","↕":"↕","↿":"↿","↾":"↾","⊎":"⊎","υ":"Ï…","ϒ":"Ï’","υ":"Ï…","⇈":"⇈","⌝":"âŒ","⌝":"âŒ","⌎":"⌎","ů":"ů","◹":"â—¹","𝓊":"ð“Š","⋰":"â‹°","ũ":"Å©","▵":"â–µ","▴":"â–´","⇈":"⇈","ü":"ü","ü":"ü","⦧":"⦧","⇕":"⇕","⫨":"⫨","⫩":"â«©","⊨":"⊨","⦜":"⦜","ϵ":"ϵ","ϰ":"ϰ","∅":"∅","ϕ":"Ï•","ϖ":"Ï–","∝":"âˆ","↕":"↕","ϱ":"ϱ","ς":"Ï‚","⊊︀":"⊊︀","⫋︀":"⫋︀","⊋︀":"⊋︀","⫌︀":"⫌︀","ϑ":"Ï‘","⊲":"⊲","⊳":"⊳","в":"в","⊢":"⊢","∨":"∨","⊻":"⊻","≚":"≚","⋮":"â‹®","|":"|","|":"|","𝔳":"ð”³","⊲":"⊲","⊂⃒":"⊂⃒","⊃⃒":"⊃⃒","𝕧":"ð•§","∝":"âˆ","⊳":"⊳","𝓋":"ð“‹","⫋︀":"⫋︀","⊊︀":"⊊︀","⫌︀":"⫌︀","⊋︀":"⊋︀","⦚":"⦚","ŵ":"ŵ","⩟":"⩟","∧":"∧","≙":"≙","℘":"℘","𝔴":"ð”´","𝕨":"ð•¨","℘":"℘","≀":"≀","≀":"≀","𝓌":"ð“Œ","⋂":"â‹‚","◯":"â—¯","⋃":"⋃","▽":"â–½","𝔵":"ð”µ","⟺":"⟺","⟷":"⟷","ξ":"ξ","⟸":"⟸","⟵":"⟵","⟼":"⟼","⋻":"â‹»","⨀":"⨀","𝕩":"ð•©","⨁":"â¨","⨂":"⨂","⟹":"⟹","⟶":"⟶","𝓍":"ð“","⨆":"⨆","⨄":"⨄","△":"â–³","⋁":"â‹","⋀":"â‹€","ý":"ý","ý":"ý","я":"Ñ","ŷ":"Å·","ы":"Ñ‹","¥":"Â¥","¥":"Â¥","𝔶":"ð”¶","ї":"Ñ—","𝕪":"ð•ª","𝓎":"ð“Ž","ю":"ÑŽ","ÿ":"ÿ","ÿ":"ÿ","ź":"ź","ž":"ž","з":"з","ż":"ż","ℨ":"ℨ","ζ":"ζ","𝔷":"ð”·","ж":"ж","⇝":"â‡","𝕫":"ð•«","𝓏":"ð“","‍":"â€","‌":"‌"},characters:{"Æ":"Æ","&":"&","Ã":"Á","Ä‚":"Ă","Â":"Â","Ð":"А","ð”„":"𝔄","À":"À","Α":"Α","Ä€":"Ā","â©“":"⩓","Ä„":"Ą","ð”¸":"𝔸","â¡":"⁡","Ã…":"Å","ð’œ":"𝒜","≔":"≔","Ã":"Ã","Ä":"Ä","∖":"∖","â«§":"⫧","⌆":"⌆","Б":"Б","∵":"∵","ℬ":"ℬ","Î’":"Β","ð”…":"𝔅","ð”¹":"𝔹","˘":"˘","≎":"≎","Ч":"Ч","©":"©","Ć":"Ć","â‹’":"⋒","â……":"ⅅ","â„­":"ℭ","ÄŒ":"Č","Ç":"Ç","Ĉ":"Ĉ","∰":"∰","ÄŠ":"Ċ","¸":"¸","·":"·","Χ":"Χ","⊙":"⊙","⊖":"⊖","⊕":"⊕","⊗":"⊗","∲":"∲","â€":"”","’":"’","∷":"∷","â©´":"⩴","≡":"≡","∯":"∯","∮":"∮","â„‚":"ℂ","âˆ":"∐","∳":"∳","⨯":"⨯","ð’ž":"𝒞","â‹“":"⋓","â‰":"≍","⤑":"⤑","Ђ":"Ђ","Ð…":"Ѕ","Ð":"Џ","‡":"‡","↡":"↡","⫤":"⫤","ÄŽ":"Ď","Д":"Д","∇":"∇","Δ":"Δ","ð”‡":"𝔇","´":"´","Ë™":"˙","Ë":"˝","`":"`","Ëœ":"˜","â‹„":"⋄","â…†":"ⅆ","ð”»":"𝔻","¨":"¨","⃜":"⃜","â‰":"≐","⇓":"⇓","â‡":"⇐","⇔":"⇔","⟸":"⟸","⟺":"⟺","⟹":"⟹","⇒":"⇒","⊨":"⊨","⇑":"⇑","⇕":"⇕","∥":"∥","↓":"↓","⤓":"⤓","⇵":"⇵","Ì‘":"̑","â¥":"⥐","⥞":"⥞","↽":"↽","⥖":"⥖","⥟":"⥟","â‡":"⇁","⥗":"⥗","⊤":"⊤","↧":"↧","ð’Ÿ":"𝒟","Ä":"Đ","ÅŠ":"Ŋ","Ã":"Ð","É":"É","Äš":"Ě","Ê":"Ê","Э":"Э","Ä–":"Ė","ð”ˆ":"𝔈","È":"È","∈":"∈","Ä’":"Ē","â—»":"◻","â–«":"▫","Ę":"Ę","ð”¼":"𝔼","Ε":"Ε","⩵":"⩵","≂":"≂","⇌":"⇌","â„°":"ℰ","⩳":"⩳","Η":"Η","Ë":"Ë","∃":"∃","â…‡":"ⅇ","Ф":"Ф","ð”‰":"𝔉","â—¼":"◼","â–ª":"▪","ð”½":"𝔽","∀":"∀","ℱ":"ℱ","Ѓ":"Ѓ",">":">","Γ":"Γ","Ïœ":"Ϝ","Äž":"Ğ","Ä¢":"Ģ","Äœ":"Ĝ","Г":"Г","Ä ":"Ġ","ð”Š":"𝔊","â‹™":"⋙","ð”¾":"𝔾","≥":"≥","â‹›":"⋛","≧":"≧","⪢":"⪢","≷":"≷","⩾":"⩾","≳":"≳","ð’¢":"𝒢","≫":"≫","Ъ":"Ъ","ˇ":"ˇ","^":"^","Ĥ":"Ĥ","ℌ":"ℌ","â„‹":"ℋ","â„":"ℍ","─":"─","Ħ":"Ħ","â‰":"≏","Е":"Е","IJ":"IJ","Ð":"Ё","Ã":"Í","ÃŽ":"Î","И":"И","İ":"İ","â„‘":"ℑ","ÃŒ":"Ì","Ī":"Ī","â…ˆ":"ⅈ","∬":"∬","∫":"∫","â‹‚":"⋂","â£":"⁣","â¢":"⁢","Ä®":"Į","ð•€":"𝕀","Ι":"Ι","â„":"ℐ","Ĩ":"Ĩ","І":"І","Ã":"Ï","Ä´":"Ĵ","Й":"Й","ð”":"𝔍","ð•":"𝕁","ð’¥":"𝒥","Ј":"Ј","Є":"Є","Ð¥":"Х","ÐŒ":"Ќ","Κ":"Κ","Ķ":"Ķ","К":"К","ð”Ž":"𝔎","ð•‚":"𝕂","ð’¦":"𝒦","Љ":"Љ","<":"<","Ĺ":"Ĺ","Λ":"Λ","⟪":"⟪","â„’":"ℒ","↞":"↞","Ľ":"Ľ","Ä»":"Ļ","Л":"Л","⟨":"⟨","â†":"←","⇤":"⇤","⇆":"⇆","⌈":"⌈","⟦":"⟦","⥡":"⥡","⇃":"⇃","⥙":"⥙","⌊":"⌊","↔":"↔","⥎":"⥎","⊣":"⊣","↤":"↤","⥚":"⥚","⊲":"⊲","â§":"⧏","⊴":"⊴","⥑":"⥑","⥠":"⥠","↿":"↿","⥘":"⥘","↼":"↼","⥒":"⥒","⋚":"⋚","≦":"≦","≶":"≶","⪡":"⪡","⩽":"⩽","≲":"≲","ð”":"𝔏","⋘":"⋘","⇚":"⇚","Ä¿":"Ŀ","⟵":"⟵","⟷":"⟷","⟶":"⟶","ð•ƒ":"𝕃","↙":"↙","↘":"↘","↰":"↰","Å":"Ł","≪":"≪","⤅":"⤅","М":"М","âŸ":" ","ℳ":"ℳ","ð”":"𝔐","∓":"∓","ð•„":"𝕄","Μ":"Μ","Њ":"Њ","Ń":"Ń","Ň":"Ň","Å…":"Ņ","Ð":"Н","​":"​","\n":" ","ð”‘":"𝔑","â ":"⁠"," ":" ","â„•":"ℕ","⫬":"⫬","≢":"≢","≭":"≭","∦":"∦","∉":"∉","≠":"≠","≂̸":"≂̸","∄":"∄","≯":"≯","≱":"≱","≧̸":"≧̸","≫̸":"≫̸","≹":"≹","⩾̸":"⩾̸","≵":"≵","≎̸":"≎̸","â‰Ì¸":"≏̸","⋪":"⋪","â§Ì¸":"⧏̸","⋬":"⋬","≮":"≮","≰":"≰","≸":"≸","≪̸":"≪̸","⩽̸":"⩽̸","≴":"≴","⪢̸":"⪢̸","⪡̸":"⪡̸","⊀":"⊀","⪯̸":"⪯̸","â‹ ":"⋠","∌":"∌","â‹«":"⋫","â§Ì¸":"⧐̸","â‹­":"⋭","âŠÌ¸":"⊏̸","â‹¢":"⋢","âŠÌ¸":"⊐̸","â‹£":"⋣","⊂⃒":"⊂⃒","⊈":"⊈","âŠ":"⊁","⪰̸":"⪰̸","â‹¡":"⋡","≿̸":"≿̸","⊃⃒":"⊃⃒","⊉":"⊉","â‰":"≁","≄":"≄","≇":"≇","≉":"≉","∤":"∤","ð’©":"𝒩","Ñ":"Ñ","Î":"Ν","Å’":"Œ","Ó":"Ó","Ô":"Ô","О":"О","Å":"Ő","ð”’":"𝔒","Ã’":"Ò","ÅŒ":"Ō","Ω":"Ω","Ο":"Ο","ð•†":"𝕆","“":"“","‘":"‘","â©”":"⩔","ð’ª":"𝒪","Ø":"Ø","Õ":"Õ","⨷":"⨷","Ö":"Ö","‾":"‾","âž":"⏞","⎴":"⎴","âœ":"⏜","∂":"∂","П":"П","ð”“":"𝔓","Φ":"Φ","Π":"Π","±":"±","â„™":"ℙ","⪻":"⪻","≺":"≺","⪯":"⪯","≼":"≼","≾":"≾","″":"″","âˆ":"∏","âˆ":"∝","ð’«":"𝒫","Ψ":"Ψ",'"':""","ð””":"𝔔","ℚ":"ℚ","ð’¬":"𝒬","â¤":"⤐","®":"®","Å”":"Ŕ","⟫":"⟫","↠":"↠","⤖":"⤖","Ř":"Ř","Å–":"Ŗ","Р":"Р","ℜ":"ℜ","∋":"∋","⇋":"⇋","⥯":"⥯","Ρ":"Ρ","⟩":"⟩","→":"→","⇥":"⇥","⇄":"⇄","⌉":"⌉","⟧":"⟧","â¥":"⥝","⇂":"⇂","⥕":"⥕","⌋":"⌋","⊢":"⊢","↦":"↦","⥛":"⥛","⊳":"⊳","â§":"⧐","⊵":"⊵","â¥":"⥏","⥜":"⥜","↾":"↾","⥔":"⥔","⇀":"⇀","⥓":"⥓","â„":"ℝ","⥰":"⥰","⇛":"⇛","â„›":"ℛ","↱":"↱","â§´":"⧴","Щ":"Щ","Ш":"Ш","Ь":"Ь","Åš":"Ś","⪼":"⪼","Å ":"Š","Åž":"Ş","Åœ":"Ŝ","С":"С","ð”–":"𝔖","↑":"↑","Σ":"Σ","∘":"∘","ð•Š":"𝕊","√":"√","â–¡":"□","⊓":"⊓","âŠ":"⊏","⊑":"⊑","âŠ":"⊐","⊒":"⊒","⊔":"⊔","ð’®":"𝒮","⋆":"⋆","â‹":"⋐","⊆":"⊆","≻":"≻","⪰":"⪰","≽":"≽","≿":"≿","∑":"∑","â‹‘":"⋑","⊃":"⊃","⊇":"⊇","Þ":"Þ","â„¢":"™","Ћ":"Ћ","Ц":"Ц","\t":" ","Τ":"Τ","Ť":"Ť","Å¢":"Ţ","Т":"Т","ð”—":"𝔗","∴":"∴","Θ":"Θ","âŸâ€Š":"  "," ":" ","∼":"∼","≃":"≃","≅":"≅","≈":"≈","ð•‹":"𝕋","⃛":"⃛","ð’¯":"𝒯","Ŧ":"Ŧ","Ú":"Ú","↟":"↟","⥉":"⥉","ÐŽ":"Ў","Ŭ":"Ŭ","Û":"Û","У":"У","Ű":"Ű","ð”˜":"𝔘","Ù":"Ù","Ū":"Ū",_:"_","âŸ":"⏟","⎵":"⎵","â":"⏝","⋃":"⋃","⊎":"⊎","Ų":"Ų","ð•Œ":"𝕌","⤒":"⤒","⇅":"⇅","↕":"↕","⥮":"⥮","⊥":"⊥","↥":"↥","↖":"↖","↗":"↗","Ï’":"ϒ","Î¥":"Υ","Å®":"Ů","ð’°":"𝒰","Ũ":"Ũ","Ü":"Ü","⊫":"⊫","â««":"⫫","Ð’":"В","⊩":"⊩","⫦":"⫦","â‹":"⋁","‖":"‖","∣":"∣","|":"|","â˜":"❘","≀":"≀"," ":" ","ð”™":"𝔙","ð•":"𝕍","ð’±":"𝒱","⊪":"⊪","Å´":"Ŵ","â‹€":"⋀","ð”š":"𝔚","ð•Ž":"𝕎","ð’²":"𝒲","ð”›":"𝔛","Ξ":"Ξ","ð•":"𝕏","ð’³":"𝒳","Я":"Я","Ї":"Ї","Ю":"Ю","Ã":"Ý","Ŷ":"Ŷ","Ы":"Ы","ð”œ":"𝔜","ð•":"𝕐","ð’´":"𝒴","Ÿ":"Ÿ","Ж":"Ж","Ź":"Ź","Ž":"Ž","З":"З","Å»":"Ż","Ζ":"Ζ","ℨ":"ℨ","ℤ":"ℤ","ð’µ":"𝒵","á":"á","ă":"ă","∾":"∾","∾̳":"∾̳","∿":"∿","â":"â","а":"а","æ":"æ","ð”ž":"𝔞","à":"à","ℵ":"ℵ","α":"α","Ä":"ā","⨿":"⨿","∧":"∧","â©•":"⩕","⩜":"⩜","⩘":"⩘","⩚":"⩚","∠":"∠","⦤":"⦤","∡":"∡","⦨":"⦨","⦩":"⦩","⦪":"⦪","⦫":"⦫","⦬":"⦬","⦭":"⦭","⦮":"⦮","⦯":"⦯","∟":"∟","⊾":"⊾","â¦":"⦝","∢":"∢","â¼":"⍼","Ä…":"ą","ð•’":"𝕒","â©°":"⩰","⩯":"⩯","≊":"≊","≋":"≋","'":"'","Ã¥":"å","ð’¶":"𝒶","*":"*","ã":"ã","ä":"ä","⨑":"⨑","â«­":"⫭","≌":"≌","϶":"϶","‵":"‵","∽":"∽","â‹":"⋍","⊽":"⊽","⌅":"⌅","⎶":"⎶","б":"б","„":"„","⦰":"⦰","β":"β","â„¶":"ℶ","≬":"≬","ð”Ÿ":"𝔟","â—¯":"◯","⨀":"⨀","â¨":"⨁","⨂":"⨂","⨆":"⨆","★":"★","â–½":"▽","â–³":"△","⨄":"⨄","â¤":"⤍","â§«":"⧫","â–´":"▴","â–¾":"▾","â—‚":"◂","â–¸":"▸","â£":"␣","â–’":"▒","â–‘":"░","â–“":"▓","â–ˆ":"█","=⃥":"=⃥","≡⃥":"≡⃥","âŒ":"⌐","ð•“":"𝕓","⋈":"⋈","â•—":"╗","â•”":"╔","â•–":"╖","â•“":"╓","â•":"═","╦":"╦","â•©":"╩","╤":"╤","â•§":"╧","â•":"╝","╚":"╚","╜":"╜","â•™":"╙","â•‘":"║","╬":"╬","â•£":"╣","â• ":"╠","â•«":"╫","â•¢":"╢","╟":"╟","⧉":"⧉","â••":"╕","â•’":"╒","â”":"┐","┌":"┌","â•¥":"╥","╨":"╨","┬":"┬","â”´":"┴","⊟":"⊟","⊞":"⊞","⊠":"⊠","â•›":"╛","╘":"╘","┘":"┘","â””":"└","│":"│","╪":"╪","â•¡":"╡","╞":"╞","┼":"┼","┤":"┤","├":"├","¦":"¦","ð’·":"𝒷","â":"⁏","\\":"\","â§…":"⧅","⟈":"⟈","•":"•","⪮":"⪮","ć":"ć","∩":"∩","â©„":"⩄","⩉":"⩉","â©‹":"⩋","⩇":"⩇","â©€":"⩀","∩︀":"∩︀","â":"⁁","â©":"⩍","Ä":"č","ç":"ç","ĉ":"ĉ","⩌":"⩌","â©":"⩐","Ä‹":"ċ","⦲":"⦲","¢":"¢","ð” ":"𝔠","ч":"ч","✓":"✓","χ":"χ","â—‹":"○","⧃":"⧃","ˆ":"ˆ","≗":"≗","↺":"↺","↻":"↻","Ⓢ":"Ⓢ","⊛":"⊛","⊚":"⊚","âŠ":"⊝","â¨":"⨐","⫯":"⫯","â§‚":"⧂","♣":"♣",":":":",",":",","@":"@","âˆ":"∁","â©­":"⩭","ð•”":"𝕔","â„—":"℗","↵":"↵","✗":"✗","ð’¸":"𝒸","â«":"⫏","â«‘":"⫑","â«":"⫐","â«’":"⫒","⋯":"⋯","⤸":"⤸","⤵":"⤵","⋞":"⋞","⋟":"⋟","↶":"↶","⤽":"⤽","∪":"∪","⩈":"⩈","⩆":"⩆","⩊":"⩊","âŠ":"⊍","â©…":"⩅","∪︀":"∪︀","↷":"↷","⤼":"⤼","⋎":"⋎","â‹":"⋏","¤":"¤","∱":"∱","⌭":"⌭","⥥":"⥥","†":"†","ℸ":"ℸ","â€":"‐","â¤":"⤏","Ä":"ď","д":"д","⇊":"⇊","â©·":"⩷","°":"°","δ":"δ","⦱":"⦱","⥿":"⥿","ð”¡":"𝔡","♦":"♦","Ï":"ϝ","⋲":"⋲","÷":"÷","⋇":"⋇","Ñ’":"ђ","⌞":"⌞","âŒ":"⌍",$:"$","ð••":"𝕕","≑":"≑","∸":"∸","∔":"∔","⊡":"⊡","⌟":"⌟","⌌":"⌌","ð’¹":"𝒹","Ñ•":"ѕ","â§¶":"⧶","Ä‘":"đ","⋱":"⋱","â–¿":"▿","⦦":"⦦","ÑŸ":"џ","⟿":"⟿","é":"é","â©®":"⩮","Ä›":"ě","≖":"≖","ê":"ê","≕":"≕","Ñ":"э","Ä—":"ė","≒":"≒","ð”¢":"𝔢","⪚":"⪚","è":"è","⪖":"⪖","⪘":"⪘","⪙":"⪙","â§":"⏧","â„“":"ℓ","⪕":"⪕","⪗":"⪗","Ä“":"ē","∅":"∅"," ":" "," ":" "," ":" ","Å‹":"ŋ"," ":" ","Ä™":"ę","ð•–":"𝕖","â‹•":"⋕","â§£":"⧣","⩱":"⩱","ε":"ε","ϵ":"ϵ","=":"=","≟":"≟","⩸":"⩸","â§¥":"⧥","≓":"≓","⥱":"⥱","ℯ":"ℯ","η":"η","ð":"ð","ë":"ë","€":"€","!":"!","Ñ„":"ф","♀":"♀","ffi":"ffi","ff":"ff","ffl":"ffl","ð”£":"𝔣","ï¬":"fi",fj:"fj","â™­":"♭","fl":"fl","â–±":"▱","Æ’":"ƒ","ð•—":"𝕗","â‹”":"⋔","â«™":"⫙","â¨":"⨍","½":"½","â…“":"⅓","¼":"¼","â…•":"⅕","â…™":"⅙","â…›":"⅛","â…”":"⅔","â…–":"⅖","¾":"¾","â…—":"⅗","â…œ":"⅜","â…˜":"⅘","â…š":"⅚","â…":"⅝","â…ž":"⅞","â„":"⁄","⌢":"⌢","ð’»":"𝒻","⪌":"⪌","ǵ":"ǵ","γ":"γ","⪆":"⪆","ÄŸ":"ğ","Ä":"ĝ","г":"г","Ä¡":"ġ","⪩":"⪩","⪀":"⪀","⪂":"⪂","⪄":"⪄","⋛︀":"⋛︀","⪔":"⪔","ð”¤":"𝔤","â„·":"ℷ","Ñ“":"ѓ","⪒":"⪒","⪥":"⪥","⪤":"⪤","≩":"≩","⪊":"⪊","⪈":"⪈","â‹§":"⋧","ð•˜":"𝕘","ℊ":"ℊ","⪎":"⪎","âª":"⪐","⪧":"⪧","⩺":"⩺","â‹—":"⋗","⦕":"⦕","⩼":"⩼","⥸":"⥸","≩︀":"≩︀","ÑŠ":"ъ","⥈":"⥈","↭":"↭","â„":"ℏ","Ä¥":"ĥ","♥":"♥","…":"…","⊹":"⊹","ð”¥":"𝔥","⤥":"⤥","⤦":"⤦","⇿":"⇿","∻":"∻","↩":"↩","↪":"↪","ð•™":"𝕙","―":"―","ð’½":"𝒽","ħ":"ħ","âƒ":"⁃","í":"í","î":"î","и":"и","е":"е","¡":"¡","ð”¦":"𝔦","ì":"ì","⨌":"⨌","∭":"∭","â§œ":"⧜","â„©":"℩","ij":"ij","Ä«":"ī","ı":"ı","⊷":"⊷","Ƶ":"Ƶ","â„…":"℅","∞":"∞","â§":"⧝","⊺":"⊺","⨗":"⨗","⨼":"⨼","Ñ‘":"ё","į":"į","ð•š":"𝕚","ι":"ι","¿":"¿","ð’¾":"𝒾","⋹":"⋹","⋵":"⋵","â‹´":"⋴","⋳":"⋳","Ä©":"ĩ","Ñ–":"і","ï":"ï","ĵ":"ĵ","й":"й","ð”§":"𝔧","È·":"ȷ","ð•›":"𝕛","ð’¿":"𝒿","ј":"ј","Ñ”":"є","κ":"κ","ϰ":"ϰ","Ä·":"ķ","к":"к","ð”¨":"𝔨","ĸ":"ĸ","Ñ…":"х","Ñœ":"ќ","ð•œ":"𝕜","ð“€":"𝓀","⤛":"⤛","⤎":"⤎","⪋":"⪋","⥢":"⥢","ĺ":"ĺ","⦴":"⦴","λ":"λ","⦑":"⦑","⪅":"⪅","«":"«","⤟":"⤟","â¤":"⤝","↫":"↫","⤹":"⤹","⥳":"⥳","↢":"↢","⪫":"⪫","⤙":"⤙","⪭":"⪭","⪭︀":"⪭︀","⤌":"⤌","â²":"❲","{":"{","[":"[","⦋":"⦋","â¦":"⦏","â¦":"⦍","ľ":"ľ","ļ":"ļ","л":"л","⤶":"⤶","⥧":"⥧","⥋":"⥋","↲":"↲","≤":"≤","⇇":"⇇","â‹‹":"⋋","⪨":"⪨","â©¿":"⩿","âª":"⪁","⪃":"⪃","⋚︀":"⋚︀","⪓":"⪓","â‹–":"⋖","⥼":"⥼","ð”©":"𝔩","⪑":"⪑","⥪":"⥪","â–„":"▄","Ñ™":"љ","⥫":"⥫","â—º":"◺","Å€":"ŀ","⎰":"⎰","≨":"≨","⪉":"⪉","⪇":"⪇","⋦":"⋦","⟬":"⟬","⇽":"⇽","⟼":"⟼","↬":"↬","⦅":"⦅","ð•":"𝕝","⨭":"⨭","⨴":"⨴","∗":"∗","â—Š":"◊","(":"(","⦓":"⦓","⥭":"⥭","‎":"‎","⊿":"⊿","‹":"‹","ð“":"𝓁","âª":"⪍","âª":"⪏","‚":"‚","Å‚":"ł","⪦":"⪦","⩹":"⩹","⋉":"⋉","⥶":"⥶","â©»":"⩻","⦖":"⦖","â—ƒ":"◃","⥊":"⥊","⥦":"⥦","≨︀":"≨︀","∺":"∺","¯":"¯","♂":"♂","✠":"✠","â–®":"▮","⨩":"⨩","м":"м","—":"—","ð”ª":"𝔪","â„§":"℧","µ":"µ","â«°":"⫰","−":"−","⨪":"⨪","â«›":"⫛","⊧":"⊧","ð•ž":"𝕞","ð“‚":"𝓂","μ":"μ","⊸":"⊸","⋙̸":"⋙̸","≫⃒":"≫⃒","â‡":"⇍","⇎":"⇎","⋘̸":"⋘̸","≪⃒":"≪⃒","â‡":"⇏","⊯":"⊯","⊮":"⊮","Å„":"ń","∠⃒":"∠⃒","⩰̸":"⩰̸","≋̸":"≋̸","ʼn":"ʼn","â™®":"♮","⩃":"⩃","ň":"ň","ņ":"ņ","⩭̸":"⩭̸","â©‚":"⩂","н":"н","–":"–","⇗":"⇗","⤤":"⤤","â‰Ì¸":"≐̸","⤨":"⤨","ð”«":"𝔫","↮":"↮","⫲":"⫲","⋼":"⋼","⋺":"⋺","Ñš":"њ","≦̸":"≦̸","↚":"↚","‥":"‥","ð•Ÿ":"𝕟","¬":"¬","⋹̸":"⋹̸","⋵̸":"⋵̸","â‹·":"⋷","â‹¶":"⋶","⋾":"⋾","⋽":"⋽","⫽⃥":"⫽⃥","∂̸":"∂̸","⨔":"⨔","↛":"↛","⤳̸":"⤳̸","â†Ì¸":"↝̸","ð“ƒ":"𝓃","⊄":"⊄","⫅̸":"⫅̸","⊅":"⊅","⫆̸":"⫆̸","ñ":"ñ","ν":"ν","#":"#","â„–":"№"," ":" ","⊭":"⊭","⤄":"⤄","â‰âƒ’":"≍⃒","⊬":"⊬","≥⃒":"≥⃒",">⃒":">⃒","â§ž":"⧞","⤂":"⤂","≤⃒":"≤⃒","<⃒":"<⃒","⊴⃒":"⊴⃒","⤃":"⤃","⊵⃒":"⊵⃒","∼⃒":"∼⃒","⇖":"⇖","⤣":"⤣","⤧":"⤧","ó":"ó","ô":"ô","о":"о","Å‘":"ő","⨸":"⨸","⦼":"⦼","Å“":"œ","⦿":"⦿","ð”¬":"𝔬","Ë›":"˛","ò":"ò","â§":"⧁","⦵":"⦵","⦾":"⦾","⦻":"⦻","â§€":"⧀","Å":"ō","ω":"ω","ο":"ο","⦶":"⦶","ð• ":"𝕠","⦷":"⦷","⦹":"⦹","∨":"∨","â©":"⩝","â„´":"ℴ","ª":"ª","º":"º","⊶":"⊶","â©–":"⩖","â©—":"⩗","â©›":"⩛","ø":"ø","⊘":"⊘","õ":"õ","⨶":"⨶","ö":"ö","⌽":"⌽","¶":"¶","⫳":"⫳","⫽":"⫽","п":"п","%":"%",".":".","‰":"‰","‱":"‱","ð”­":"𝔭","φ":"φ","Ï•":"ϕ","☎":"☎","Ï€":"π","Ï–":"ϖ","ℎ":"ℎ","+":"+","⨣":"⨣","⨢":"⨢","⨥":"⨥","⩲":"⩲","⨦":"⨦","⨧":"⨧","⨕":"⨕","ð•¡":"𝕡","£":"£","⪳":"⪳","⪷":"⪷","⪹":"⪹","⪵":"⪵","⋨":"⋨","′":"′","⌮":"⌮","⌒":"⌒","⌓":"⌓","⊰":"⊰","ð“…":"𝓅","ψ":"ψ"," ":" ","ð”®":"𝔮","ð•¢":"𝕢","â—":"⁗","ð“†":"𝓆","⨖":"⨖","?":"?","⤜":"⤜","⥤":"⥤","∽̱":"∽̱","Å•":"ŕ","⦳":"⦳","⦒":"⦒","⦥":"⦥","»":"»","⥵":"⥵","⤠":"⤠","⤳":"⤳","⤞":"⤞","⥅":"⥅","⥴":"⥴","↣":"↣","â†":"↝","⤚":"⤚","∶":"∶","â³":"❳","}":"}","]":"]","⦌":"⦌","⦎":"⦎","â¦":"⦐","Å™":"ř","Å—":"ŗ","Ñ€":"р","⤷":"⤷","⥩":"⥩","↳":"↳","â–­":"▭","⥽":"⥽","ð”¯":"𝔯","⥬":"⥬","Ï":"ρ","ϱ":"ϱ","⇉":"⇉","⋌":"⋌","Ëš":"˚","â€":"‏","⎱":"⎱","â«®":"⫮","⟭":"⟭","⇾":"⇾","⦆":"⦆","ð•£":"𝕣","⨮":"⨮","⨵":"⨵",")":")","⦔":"⦔","⨒":"⨒","›":"›","ð“‡":"𝓇","⋊":"⋊","â–¹":"▹","â§Ž":"⧎","⥨":"⥨","℞":"℞","Å›":"ś","⪴":"⪴","⪸":"⪸","Å¡":"š","ÅŸ":"ş","Å":"ŝ","⪶":"⪶","⪺":"⪺","â‹©":"⋩","⨓":"⨓","Ñ":"с","â‹…":"⋅","⩦":"⩦","⇘":"⇘","§":"§",";":";","⤩":"⤩","✶":"✶","ð”°":"𝔰","♯":"♯","щ":"щ","ш":"ш","­":"­","σ":"σ","Ï‚":"ς","⩪":"⩪","⪞":"⪞","⪠":"⪠","âª":"⪝","⪟":"⪟","≆":"≆","⨤":"⨤","⥲":"⥲","⨳":"⨳","⧤":"⧤","⌣":"⌣","⪪":"⪪","⪬":"⪬","⪬︀":"⪬︀","ÑŒ":"ь","/":"/","â§„":"⧄","⌿":"⌿","ð•¤":"𝕤","â™ ":"♠","⊓︀":"⊓︀","⊔︀":"⊔︀","ð“ˆ":"𝓈","☆":"☆","⊂":"⊂","â«…":"⫅","⪽":"⪽","⫃":"⫃","â«":"⫁","â«‹":"⫋","⊊":"⊊","⪿":"⪿","⥹":"⥹","⫇":"⫇","â«•":"⫕","â«“":"⫓","♪":"♪","¹":"¹","²":"²","³":"³","⫆":"⫆","⪾":"⪾","⫘":"⫘","â«„":"⫄","⟉":"⟉","â«—":"⫗","⥻":"⥻","â«‚":"⫂","⫌":"⫌","⊋":"⊋","â«€":"⫀","⫈":"⫈","â«”":"⫔","â«–":"⫖","⇙":"⇙","⤪":"⤪","ß":"ß","⌖":"⌖","Ï„":"τ","Å¥":"ť","Å£":"ţ","Ñ‚":"т","⌕":"⌕","ð”±":"𝔱","θ":"θ","Ï‘":"ϑ","þ":"þ","×":"×","⨱":"⨱","⨰":"⨰","⌶":"⌶","⫱":"⫱","ð•¥":"𝕥","⫚":"⫚","‴":"‴","â–µ":"▵","≜":"≜","â—¬":"◬","⨺":"⨺","⨹":"⨹","â§":"⧍","⨻":"⨻","â¢":"⏢","ð“‰":"𝓉","ц":"ц","Ñ›":"ћ","ŧ":"ŧ","⥣":"⥣","ú":"ú","Ñž":"ў","Å­":"ŭ","û":"û","у":"у","ű":"ű","⥾":"⥾","ð”²":"𝔲","ù":"ù","â–€":"▀","⌜":"⌜","âŒ":"⌏","â—¸":"◸","Å«":"ū","ų":"ų","ð•¦":"𝕦","Ï…":"υ","⇈":"⇈","âŒ":"⌝","⌎":"⌎","ů":"ů","â—¹":"◹","ð“Š":"𝓊","â‹°":"⋰","Å©":"ũ","ü":"ü","⦧":"⦧","⫨":"⫨","â«©":"⫩","⦜":"⦜","⊊︀":"⊊︀","⫋︀":"⫋︀","⊋︀":"⊋︀","⫌︀":"⫌︀","в":"в","⊻":"⊻","≚":"≚","â‹®":"⋮","ð”³":"𝔳","ð•§":"𝕧","ð“‹":"𝓋","⦚":"⦚","ŵ":"ŵ","⩟":"⩟","≙":"≙","℘":"℘","ð”´":"𝔴","ð•¨":"𝕨","ð“Œ":"𝓌","ð”µ":"𝔵","ξ":"ξ","â‹»":"⋻","ð•©":"𝕩","ð“":"𝓍","ý":"ý","Ñ":"я","Å·":"ŷ","Ñ‹":"ы","Â¥":"¥","ð”¶":"𝔶","Ñ—":"ї","ð•ª":"𝕪","ð“Ž":"𝓎","ÑŽ":"ю","ÿ":"ÿ","ź":"ź","ž":"ž","з":"з","ż":"ż","ζ":"ζ","ð”·":"𝔷","ж":"ж","â‡":"⇝","ð•«":"𝕫","ð“":"𝓏","â€":"‍","‌":"‌"}}}; - -/***/ }), - -/***/ "./node_modules/html-entities/lib/numeric-unicode-map.js": -/*!***************************************************************!*\ - !*** ./node_modules/html-entities/lib/numeric-unicode-map.js ***! - \***************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.numericUnicodeMap={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376}; - -/***/ }), - -/***/ "./node_modules/html-entities/lib/surrogate-pairs.js": -/*!***********************************************************!*\ - !*** ./node_modules/html-entities/lib/surrogate-pairs.js ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.fromCodePoint=String.fromCodePoint||function(astralCodePoint){return String.fromCharCode(Math.floor((astralCodePoint-65536)/1024)+55296,(astralCodePoint-65536)%1024+56320)};exports.getCodePoint=String.prototype.codePointAt?function(input,position){return input.codePointAt(position)}:function(input,position){return(input.charCodeAt(position)-55296)*1024+input.charCodeAt(position+1)-56320+65536};exports.highSurrogateFrom=55296;exports.highSurrogateTo=56319; - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js": -/*!***************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/clients/WebSocketClient.js ***! - \***************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": function() { return /* binding */ WebSocketClient; } -/* harmony export */ }); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } - - - -var WebSocketClient = /*#__PURE__*/function () { - /** - * @param {string} url - */ - function WebSocketClient(url) { - _classCallCheck(this, WebSocketClient); - - this.client = new WebSocket(url); - - this.client.onerror = function (error) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_0__.log.error(error); - }; - } - /** - * @param {(...args: any[]) => void} f - */ - - - _createClass(WebSocketClient, [{ - key: "onOpen", - value: function onOpen(f) { - this.client.onopen = f; - } - /** - * @param {(...args: any[]) => void} f - */ - - }, { - key: "onClose", - value: function onClose(f) { - this.client.onclose = f; - } // call f with the message string as the first argument - - /** - * @param {(...args: any[]) => void} f - */ - - }, { - key: "onMessage", - value: function onMessage(f) { - this.client.onmessage = function (e) { - f(e.data); - }; - } - }]); - - return WebSocketClient; -}(); - - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/index.js?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10": -/*!**********************************************************************************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/index.js?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10 ***! - \**********************************************************************************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -var __resourceQuery = "?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! webpack/hot/log.js */ "./node_modules/webpack/hot/log.js"); -/* harmony import */ var webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/stripAnsi.js */ "./node_modules/webpack-dev-server/client/utils/stripAnsi.js"); -/* harmony import */ var _utils_parseURL_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/parseURL.js */ "./node_modules/webpack-dev-server/client/utils/parseURL.js"); -/* harmony import */ var _socket_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./socket.js */ "./node_modules/webpack-dev-server/client/socket.js"); -/* harmony import */ var _overlay_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./overlay.js */ "./node_modules/webpack-dev-server/client/overlay.js"); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -/* harmony import */ var _utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/sendMessage.js */ "./node_modules/webpack-dev-server/client/utils/sendMessage.js"); -/* harmony import */ var _utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/reloadApp.js */ "./node_modules/webpack-dev-server/client/utils/reloadApp.js"); -/* harmony import */ var _utils_createSocketURL_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/createSocketURL.js */ "./node_modules/webpack-dev-server/client/utils/createSocketURL.js"); -/* global __resourceQuery, __webpack_hash__ */ -/// - - - - - - - - - -/** - * @typedef {Object} Options - * @property {boolean} hot - * @property {boolean} liveReload - * @property {boolean} progress - * @property {boolean | { warnings?: boolean, errors?: boolean, trustedTypesPolicyName?: string }} overlay - * @property {string} [logging] - * @property {number} [reconnect] - */ - -/** - * @typedef {Object} Status - * @property {boolean} isUnloading - * @property {string} currentHash - * @property {string} [previousHash] - */ - -/** - * @type {Status} - */ - -var status = { - isUnloading: false, - // TODO Workaround for webpack v4, `__webpack_hash__` is not replaced without HotModuleReplacement - // eslint-disable-next-line camelcase - currentHash: true ? __webpack_require__.h() : 0 -}; -/** @type {Options} */ - -var options = { - hot: false, - liveReload: false, - progress: false, - overlay: false -}; -var parsedResourceQuery = (0,_utils_parseURL_js__WEBPACK_IMPORTED_MODULE_2__["default"])(__resourceQuery); - -if (parsedResourceQuery.hot === "true") { - options.hot = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Hot Module Replacement enabled."); -} - -if (parsedResourceQuery["live-reload"] === "true") { - options.liveReload = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Live Reloading enabled."); -} - -if (parsedResourceQuery.logging) { - options.logging = parsedResourceQuery.logging; -} - -if (typeof parsedResourceQuery.reconnect !== "undefined") { - options.reconnect = Number(parsedResourceQuery.reconnect); -} -/** - * @param {string} level - */ - - -function setAllLogLevel(level) { - // This is needed because the HMR logger operate separately from dev server logger - webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0___default().setLogLevel(level === "verbose" || level === "log" ? "info" : level); - (0,_utils_log_js__WEBPACK_IMPORTED_MODULE_5__.setLogLevel)(level); -} - -if (options.logging) { - setAllLogLevel(options.logging); -} - -self.addEventListener("beforeunload", function () { - status.isUnloading = true; -}); -var onSocketMessage = { - hot: function hot() { - if (parsedResourceQuery.hot === "false") { - return; - } - - options.hot = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Hot Module Replacement enabled."); - }, - liveReload: function liveReload() { - if (parsedResourceQuery["live-reload"] === "false") { - return; - } - - options.liveReload = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Live Reloading enabled."); - }, - invalid: function invalid() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("App updated. Recompiling..."); // Fixes #1042. overlay doesn't clear if errors are fixed but warnings remain. - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Invalid"); - }, - - /** - * @param {string} hash - */ - hash: function hash(_hash) { - status.previousHash = status.currentHash; - status.currentHash = _hash; - }, - logging: setAllLogLevel, - - /** - * @param {boolean} value - */ - overlay: function overlay(value) { - if (typeof document === "undefined") { - return; - } - - options.overlay = value; - }, - - /** - * @param {number} value - */ - reconnect: function reconnect(value) { - if (parsedResourceQuery.reconnect === "false") { - return; - } - - options.reconnect = value; - }, - - /** - * @param {boolean} value - */ - progress: function progress(value) { - options.progress = value; - }, - - /** - * @param {{ pluginName?: string, percent: number, msg: string }} data - */ - "progress-update": function progressUpdate(data) { - if (options.progress) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(data.pluginName ? "[".concat(data.pluginName, "] ") : "").concat(data.percent, "% - ").concat(data.msg, ".")); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Progress", data); - }, - "still-ok": function stillOk() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Nothing changed."); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("StillOk"); - }, - ok: function ok() { - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Ok"); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__["default"])(options, status); - }, - // TODO: remove in v5 in favor of 'static-changed' - - /** - * @param {string} file - */ - "content-changed": function contentChanged(file) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(file ? "\"".concat(file, "\"") : "Content", " from static directory was changed. Reloading...")); - self.location.reload(); - }, - - /** - * @param {string} file - */ - "static-changed": function staticChanged(file) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(file ? "\"".concat(file, "\"") : "Content", " from static directory was changed. Reloading...")); - self.location.reload(); - }, - - /** - * @param {Error[]} warnings - * @param {any} params - */ - warnings: function warnings(_warnings, params) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.warn("Warnings while compiling."); - - var printableWarnings = _warnings.map(function (error) { - var _formatProblem = (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.formatProblem)("warning", error), - header = _formatProblem.header, - body = _formatProblem.body; - - return "".concat(header, "\n").concat((0,_utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__["default"])(body)); - }); - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Warnings", printableWarnings); - - for (var i = 0; i < printableWarnings.length; i++) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.warn(printableWarnings[i]); - } - - var needShowOverlayForWarnings = typeof options.overlay === "boolean" ? options.overlay : options.overlay && options.overlay.warnings; - - if (needShowOverlayForWarnings) { - var trustedTypesPolicyName = typeof options.overlay === "object" && options.overlay.trustedTypesPolicyName; - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.show)("warning", _warnings, trustedTypesPolicyName || null); - } - - if (params && params.preventReloading) { - return; - } - - (0,_utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__["default"])(options, status); - }, - - /** - * @param {Error[]} errors - */ - errors: function errors(_errors) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error("Errors while compiling. Reload prevented."); - - var printableErrors = _errors.map(function (error) { - var _formatProblem2 = (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.formatProblem)("error", error), - header = _formatProblem2.header, - body = _formatProblem2.body; - - return "".concat(header, "\n").concat((0,_utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__["default"])(body)); - }); - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Errors", printableErrors); - - for (var i = 0; i < printableErrors.length; i++) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error(printableErrors[i]); - } - - var needShowOverlayForErrors = typeof options.overlay === "boolean" ? options.overlay : options.overlay && options.overlay.errors; - - if (needShowOverlayForErrors) { - var trustedTypesPolicyName = typeof options.overlay === "object" && options.overlay.trustedTypesPolicyName; - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.show)("error", _errors, trustedTypesPolicyName || null); - } - }, - - /** - * @param {Error} error - */ - error: function error(_error) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error(_error); - }, - close: function close() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Disconnected!"); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Close"); - } -}; -var socketURL = (0,_utils_createSocketURL_js__WEBPACK_IMPORTED_MODULE_8__["default"])(parsedResourceQuery); -(0,_socket_js__WEBPACK_IMPORTED_MODULE_3__["default"])(socketURL, onSocketMessage, options.reconnect); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/modules/logger/index.js": -/*!************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/modules/logger/index.js ***! - \************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -/******/ (function() { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./client-src/modules/logger/SyncBailHookFake.js": -/*!*******************************************************!*\ - !*** ./client-src/modules/logger/SyncBailHookFake.js ***! - \*******************************************************/ -/***/ (function(module) { - - -/** - * Client stub for tapable SyncBailHook - */ - -module.exports = function clientTapableSyncBailHook() { - return { - call: function call() {} - }; -}; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/Logger.js": -/*!****************************************************!*\ - !*** ./node_modules/webpack/lib/logging/Logger.js ***! - \****************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _iterableToArray(iter) { - if (typeof (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }) !== "undefined" && iter[(typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }).iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) { - arr2[i] = arr[i]; - } - - return arr2; -} - -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} - -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); - return Constructor; -} - -var LogType = Object.freeze({ - error: - /** @type {"error"} */ - "error", - // message, c style arguments - warn: - /** @type {"warn"} */ - "warn", - // message, c style arguments - info: - /** @type {"info"} */ - "info", - // message, c style arguments - log: - /** @type {"log"} */ - "log", - // message, c style arguments - debug: - /** @type {"debug"} */ - "debug", - // message, c style arguments - trace: - /** @type {"trace"} */ - "trace", - // no arguments - group: - /** @type {"group"} */ - "group", - // [label] - groupCollapsed: - /** @type {"groupCollapsed"} */ - "groupCollapsed", - // [label] - groupEnd: - /** @type {"groupEnd"} */ - "groupEnd", - // [label] - profile: - /** @type {"profile"} */ - "profile", - // [profileName] - profileEnd: - /** @type {"profileEnd"} */ - "profileEnd", - // [profileName] - time: - /** @type {"time"} */ - "time", - // name, time as [seconds, nanoseconds] - clear: - /** @type {"clear"} */ - "clear", - // no arguments - status: - /** @type {"status"} */ - "status" // message, arguments - -}); -exports.LogType = LogType; -/** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */ - -var LOG_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger raw log method"); -var TIMERS_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger times"); -var TIMERS_AGGREGATES_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger aggregated times"); - -var WebpackLogger = /*#__PURE__*/function () { - /** - * @param {function(LogTypeEnum, any[]=): void} log log function - * @param {function(string | function(): string): WebpackLogger} getChildLogger function to create child logger - */ - function WebpackLogger(log, getChildLogger) { - _classCallCheck(this, WebpackLogger); - - this[LOG_SYMBOL] = log; - this.getChildLogger = getChildLogger; - } - - _createClass(WebpackLogger, [{ - key: "error", - value: function error() { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - this[LOG_SYMBOL](LogType.error, args); - } - }, { - key: "warn", - value: function warn() { - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - this[LOG_SYMBOL](LogType.warn, args); - } - }, { - key: "info", - value: function info() { - for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - this[LOG_SYMBOL](LogType.info, args); - } - }, { - key: "log", - value: function log() { - for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - args[_key4] = arguments[_key4]; - } - - this[LOG_SYMBOL](LogType.log, args); - } - }, { - key: "debug", - value: function debug() { - for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - args[_key5] = arguments[_key5]; - } - - this[LOG_SYMBOL](LogType.debug, args); - } - }, { - key: "assert", - value: function assert(assertion) { - if (!assertion) { - for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) { - args[_key6 - 1] = arguments[_key6]; - } - - this[LOG_SYMBOL](LogType.error, args); - } - } - }, { - key: "trace", - value: function trace() { - this[LOG_SYMBOL](LogType.trace, ["Trace"]); - } - }, { - key: "clear", - value: function clear() { - this[LOG_SYMBOL](LogType.clear); - } - }, { - key: "status", - value: function status() { - for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { - args[_key7] = arguments[_key7]; - } - - this[LOG_SYMBOL](LogType.status, args); - } - }, { - key: "group", - value: function group() { - for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) { - args[_key8] = arguments[_key8]; - } - - this[LOG_SYMBOL](LogType.group, args); - } - }, { - key: "groupCollapsed", - value: function groupCollapsed() { - for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) { - args[_key9] = arguments[_key9]; - } - - this[LOG_SYMBOL](LogType.groupCollapsed, args); - } - }, { - key: "groupEnd", - value: function groupEnd() { - for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) { - args[_key10] = arguments[_key10]; - } - - this[LOG_SYMBOL](LogType.groupEnd, args); - } - }, { - key: "profile", - value: function profile(label) { - this[LOG_SYMBOL](LogType.profile, [label]); - } - }, { - key: "profileEnd", - value: function profileEnd(label) { - this[LOG_SYMBOL](LogType.profileEnd, [label]); - } - }, { - key: "time", - value: function time(label) { - this[TIMERS_SYMBOL] = this[TIMERS_SYMBOL] || new Map(); - this[TIMERS_SYMBOL].set(label, process.hrtime()); - } - }, { - key: "timeLog", - value: function timeLog(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeLog()")); - } - - var time = process.hrtime(prev); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }, { - key: "timeEnd", - value: function timeEnd(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeEnd()")); - } - - var time = process.hrtime(prev); - this[TIMERS_SYMBOL].delete(label); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }, { - key: "timeAggregate", - value: function timeAggregate(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeAggregate()")); - } - - var time = process.hrtime(prev); - this[TIMERS_SYMBOL].delete(label); - this[TIMERS_AGGREGATES_SYMBOL] = this[TIMERS_AGGREGATES_SYMBOL] || new Map(); - var current = this[TIMERS_AGGREGATES_SYMBOL].get(label); - - if (current !== undefined) { - if (time[1] + current[1] > 1e9) { - time[0] += current[0] + 1; - time[1] = time[1] - 1e9 + current[1]; - } else { - time[0] += current[0]; - time[1] += current[1]; - } - } - - this[TIMERS_AGGREGATES_SYMBOL].set(label, time); - } - }, { - key: "timeAggregateEnd", - value: function timeAggregateEnd(label) { - if (this[TIMERS_AGGREGATES_SYMBOL] === undefined) return; - var time = this[TIMERS_AGGREGATES_SYMBOL].get(label); - if (time === undefined) return; - this[TIMERS_AGGREGATES_SYMBOL].delete(label); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }]); - - return WebpackLogger; -}(); - -exports.Logger = WebpackLogger; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/createConsoleLogger.js": -/*!*****************************************************************!*\ - !*** ./node_modules/webpack/lib/logging/createConsoleLogger.js ***! - \*****************************************************************/ -/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_10785__) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _iterableToArray(iter) { - if (typeof (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }) !== "undefined" && iter[(typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }).iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) { - arr2[i] = arr[i]; - } - - return arr2; -} - -var _require = __nested_webpack_require_10785__(/*! ./Logger */ "./node_modules/webpack/lib/logging/Logger.js"), - LogType = _require.LogType; -/** @typedef {import("../../declarations/WebpackOptions").FilterItemTypes} FilterItemTypes */ - -/** @typedef {import("../../declarations/WebpackOptions").FilterTypes} FilterTypes */ - -/** @typedef {import("./Logger").LogTypeEnum} LogTypeEnum */ - -/** @typedef {function(string): boolean} FilterFunction */ - -/** - * @typedef {Object} LoggerConsole - * @property {function(): void} clear - * @property {function(): void} trace - * @property {(...args: any[]) => void} info - * @property {(...args: any[]) => void} log - * @property {(...args: any[]) => void} warn - * @property {(...args: any[]) => void} error - * @property {(...args: any[]) => void=} debug - * @property {(...args: any[]) => void=} group - * @property {(...args: any[]) => void=} groupCollapsed - * @property {(...args: any[]) => void=} groupEnd - * @property {(...args: any[]) => void=} status - * @property {(...args: any[]) => void=} profile - * @property {(...args: any[]) => void=} profileEnd - * @property {(...args: any[]) => void=} logTime - */ - -/** - * @typedef {Object} LoggerOptions - * @property {false|true|"none"|"error"|"warn"|"info"|"log"|"verbose"} level loglevel - * @property {FilterTypes|boolean} debug filter for debug logging - * @property {LoggerConsole} console the console to log to - */ - -/** - * @param {FilterItemTypes} item an input item - * @returns {FilterFunction} filter function - */ - - -var filterToFunction = function filterToFunction(item) { - if (typeof item === "string") { - var regExp = new RegExp("[\\\\/]".concat(item.replace( // eslint-disable-next-line no-useless-escape - /[-[\]{}()*+?.\\^$|]/g, "\\$&"), "([\\\\/]|$|!|\\?)")); - return function (ident) { - return regExp.test(ident); - }; - } - - if (item && typeof item === "object" && typeof item.test === "function") { - return function (ident) { - return item.test(ident); - }; - } - - if (typeof item === "function") { - return item; - } - - if (typeof item === "boolean") { - return function () { - return item; - }; - } -}; -/** - * @enum {number} - */ - - -var LogLevel = { - none: 6, - false: 6, - error: 5, - warn: 4, - info: 3, - log: 2, - true: 2, - verbose: 1 -}; -/** - * @param {LoggerOptions} options options object - * @returns {function(string, LogTypeEnum, any[]): void} logging function - */ - -module.exports = function (_ref) { - var _ref$level = _ref.level, - level = _ref$level === void 0 ? "info" : _ref$level, - _ref$debug = _ref.debug, - debug = _ref$debug === void 0 ? false : _ref$debug, - console = _ref.console; - var debugFilters = typeof debug === "boolean" ? [function () { - return debug; - }] : - /** @type {FilterItemTypes[]} */ - [].concat(debug).map(filterToFunction); - /** @type {number} */ - - var loglevel = LogLevel["".concat(level)] || 0; - /** - * @param {string} name name of the logger - * @param {LogTypeEnum} type type of the log entry - * @param {any[]} args arguments of the log entry - * @returns {void} - */ - - var logger = function logger(name, type, args) { - var labeledArgs = function labeledArgs() { - if (Array.isArray(args)) { - if (args.length > 0 && typeof args[0] === "string") { - return ["[".concat(name, "] ").concat(args[0])].concat(_toConsumableArray(args.slice(1))); - } else { - return ["[".concat(name, "]")].concat(_toConsumableArray(args)); - } - } else { - return []; - } - }; - - var debug = debugFilters.some(function (f) { - return f(name); - }); - - switch (type) { - case LogType.debug: - if (!debug) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.debug === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.debug.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.log: - if (!debug && loglevel > LogLevel.log) return; - console.log.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.info: - if (!debug && loglevel > LogLevel.info) return; - console.info.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.warn: - if (!debug && loglevel > LogLevel.warn) return; - console.warn.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.error: - if (!debug && loglevel > LogLevel.error) return; - console.error.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.trace: - if (!debug) return; - console.trace(); - break; - - case LogType.groupCollapsed: - if (!debug && loglevel > LogLevel.log) return; - - if (!debug && loglevel > LogLevel.verbose) { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.groupCollapsed === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.groupCollapsed.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - } - - // falls through - - case LogType.group: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.group === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.group.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.groupEnd: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.groupEnd === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.groupEnd(); - } - - break; - - case LogType.time: - { - if (!debug && loglevel > LogLevel.log) return; - var ms = args[1] * 1000 + args[2] / 1000000; - var msg = "[".concat(name, "] ").concat(args[0], ": ").concat(ms, " ms"); - - if (typeof console.logTime === "function") { - console.logTime(msg); - } else { - console.log(msg); - } - - break; - } - - case LogType.profile: - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.profile === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.profile.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.profileEnd: - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.profileEnd === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.profileEnd.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.clear: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.clear === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.clear(); - } - - break; - - case LogType.status: - if (!debug && loglevel > LogLevel.info) return; - - if (typeof console.status === "function") { - if (args.length === 0) { - console.status(); - } else { - console.status.apply(console, _toConsumableArray(labeledArgs())); - } - } else { - if (args.length !== 0) { - console.info.apply(console, _toConsumableArray(labeledArgs())); - } - } - - break; - - default: - throw new Error("Unexpected LogType ".concat(type)); - } - }; - - return logger; -}; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/runtime.js": -/*!*****************************************************!*\ - !*** ./node_modules/webpack/lib/logging/runtime.js ***! - \*****************************************************/ -/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_20872__) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _extends() { - _extends = Object.assign ? Object.assign.bind() : function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - return _extends.apply(this, arguments); -} - -var SyncBailHook = __nested_webpack_require_20872__(/*! tapable/lib/SyncBailHook */ "./client-src/modules/logger/SyncBailHookFake.js"); - -var _require = __nested_webpack_require_20872__(/*! ./Logger */ "./node_modules/webpack/lib/logging/Logger.js"), - Logger = _require.Logger; - -var createConsoleLogger = __nested_webpack_require_20872__(/*! ./createConsoleLogger */ "./node_modules/webpack/lib/logging/createConsoleLogger.js"); -/** @type {createConsoleLogger.LoggerOptions} */ - - -var currentDefaultLoggerOptions = { - level: "info", - debug: false, - console: console -}; -var currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions); -/** - * @param {string} name name of the logger - * @returns {Logger} a logger - */ - -exports.getLogger = function (name) { - return new Logger(function (type, args) { - if (exports.hooks.log.call(name, type, args) === undefined) { - currentDefaultLogger(name, type, args); - } - }, function (childName) { - return exports.getLogger("".concat(name, "/").concat(childName)); - }); -}; -/** - * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options - * @returns {void} - */ - - -exports.configureDefaultLogger = function (options) { - _extends(currentDefaultLoggerOptions, options); - - currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions); -}; - -exports.hooks = { - log: new SyncBailHook(["origin", "type", "args"]) -}; - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __nested_webpack_require_23009__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __nested_webpack_require_23009__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ !function() { -/******/ // define getter functions for harmony exports -/******/ __nested_webpack_require_23009__.d = function(exports, definition) { -/******/ for(var key in definition) { -/******/ if(__nested_webpack_require_23009__.o(definition, key) && !__nested_webpack_require_23009__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ !function() { -/******/ __nested_webpack_require_23009__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -/******/ }(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ !function() { -/******/ // define __esModule on exports -/******/ __nested_webpack_require_23009__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ }(); -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. -!function() { -/*!********************************************!*\ - !*** ./client-src/modules/logger/index.js ***! - \********************************************/ -__nested_webpack_require_23009__.r(__webpack_exports__); -/* harmony export */ __nested_webpack_require_23009__.d(__webpack_exports__, { -/* harmony export */ "default": function() { return /* reexport default export from named module */ webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__; } -/* harmony export */ }); -/* harmony import */ var webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_23009__(/*! webpack/lib/logging/runtime.js */ "./node_modules/webpack/lib/logging/runtime.js"); - -}(); -var __webpack_export_target__ = exports; -for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i]; -if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true }); -/******/ })() -; - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/overlay.js": -/*!***********************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/overlay.js ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "formatProblem": function() { return /* binding */ formatProblem; }, -/* harmony export */ "hide": function() { return /* binding */ hide; }, -/* harmony export */ "show": function() { return /* binding */ show; } -/* harmony export */ }); -/* harmony import */ var ansi_html_community__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ansi-html-community */ "./node_modules/ansi-html-community/index.js"); -/* harmony import */ var ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(ansi_html_community__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! html-entities */ "./node_modules/html-entities/lib/index.js"); -/* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(html_entities__WEBPACK_IMPORTED_MODULE_1__); -// The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app) -// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware). - - -var colors = { - reset: ["transparent", "transparent"], - black: "181818", - red: "E36049", - green: "B3CB74", - yellow: "FFD080", - blue: "7CAFC2", - magenta: "7FACCA", - cyan: "C3C2EF", - lightgrey: "EBE7E3", - darkgrey: "6D7891" -}; -/** @type {HTMLIFrameElement | null | undefined} */ - -var iframeContainerElement; -/** @type {HTMLDivElement | null | undefined} */ - -var containerElement; -/** @type {Array<(element: HTMLDivElement) => void>} */ - -var onLoadQueue = []; -/** @type {TrustedTypePolicy | undefined} */ - -var overlayTrustedTypesPolicy; -ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default().setColors(colors); -/** - * @param {string | null} trustedTypesPolicyName - */ - -function createContainer(trustedTypesPolicyName) { - // Enable Trusted Types if they are available in the current browser. - if (window.trustedTypes) { - overlayTrustedTypesPolicy = window.trustedTypes.createPolicy(trustedTypesPolicyName || "webpack-dev-server#overlay", { - createHTML: function createHTML(value) { - return value; - } - }); - } - - iframeContainerElement = document.createElement("iframe"); - iframeContainerElement.id = "webpack-dev-server-client-overlay"; - iframeContainerElement.src = "about:blank"; - iframeContainerElement.style.position = "fixed"; - iframeContainerElement.style.left = 0; - iframeContainerElement.style.top = 0; - iframeContainerElement.style.right = 0; - iframeContainerElement.style.bottom = 0; - iframeContainerElement.style.width = "100vw"; - iframeContainerElement.style.height = "100vh"; - iframeContainerElement.style.border = "none"; - iframeContainerElement.style.zIndex = 9999999999; - - iframeContainerElement.onload = function () { - containerElement = - /** @type {Document} */ - - /** @type {HTMLIFrameElement} */ - iframeContainerElement.contentDocument.createElement("div"); - containerElement.id = "webpack-dev-server-client-overlay-div"; - containerElement.style.position = "fixed"; - containerElement.style.boxSizing = "border-box"; - containerElement.style.left = 0; - containerElement.style.top = 0; - containerElement.style.right = 0; - containerElement.style.bottom = 0; - containerElement.style.width = "100vw"; - containerElement.style.height = "100vh"; - containerElement.style.backgroundColor = "rgba(0, 0, 0, 0.85)"; - containerElement.style.color = "#E8E8E8"; - containerElement.style.fontFamily = "Menlo, Consolas, monospace"; - containerElement.style.fontSize = "large"; - containerElement.style.padding = "2rem"; - containerElement.style.lineHeight = "1.2"; - containerElement.style.whiteSpace = "pre-wrap"; - containerElement.style.overflow = "auto"; - var headerElement = document.createElement("span"); - headerElement.innerText = "Compiled with problems:"; - var closeButtonElement = document.createElement("button"); - closeButtonElement.innerText = "X"; - closeButtonElement.style.background = "transparent"; - closeButtonElement.style.border = "none"; - closeButtonElement.style.fontSize = "20px"; - closeButtonElement.style.fontWeight = "bold"; - closeButtonElement.style.color = "white"; - closeButtonElement.style.cursor = "pointer"; - closeButtonElement.style.cssFloat = "right"; // @ts-ignore - - closeButtonElement.style.styleFloat = "right"; - closeButtonElement.addEventListener("click", function () { - hide(); - }); - containerElement.appendChild(headerElement); - containerElement.appendChild(closeButtonElement); - containerElement.appendChild(document.createElement("br")); - containerElement.appendChild(document.createElement("br")); - /** @type {Document} */ - - /** @type {HTMLIFrameElement} */ - iframeContainerElement.contentDocument.body.appendChild(containerElement); - onLoadQueue.forEach(function (onLoad) { - onLoad( - /** @type {HTMLDivElement} */ - containerElement); - }); - onLoadQueue = []; - /** @type {HTMLIFrameElement} */ - - iframeContainerElement.onload = null; - }; - - document.body.appendChild(iframeContainerElement); -} -/** - * @param {(element: HTMLDivElement) => void} callback - * @param {string | null} trustedTypesPolicyName - */ - - -function ensureOverlayExists(callback, trustedTypesPolicyName) { - if (containerElement) { - // Everything is ready, call the callback right away. - callback(containerElement); - return; - } - - onLoadQueue.push(callback); - - if (iframeContainerElement) { - return; - } - - createContainer(trustedTypesPolicyName); -} // Successful compilation. - - -function hide() { - if (!iframeContainerElement) { - return; - } // Clean up and reset internal state. - - - document.body.removeChild(iframeContainerElement); - iframeContainerElement = null; - containerElement = null; -} -/** - * @param {string} type - * @param {string | { file?: string, moduleName?: string, loc?: string, message?: string }} item - * @returns {{ header: string, body: string }} - */ - - -function formatProblem(type, item) { - var header = type === "warning" ? "WARNING" : "ERROR"; - var body = ""; - - if (typeof item === "string") { - body += item; - } else { - var file = item.file || ""; // eslint-disable-next-line no-nested-ternary - - var moduleName = item.moduleName ? item.moduleName.indexOf("!") !== -1 ? "".concat(item.moduleName.replace(/^(\s|\S)*!/, ""), " (").concat(item.moduleName, ")") : "".concat(item.moduleName) : ""; - var loc = item.loc; - header += "".concat(moduleName || file ? " in ".concat(moduleName ? "".concat(moduleName).concat(file ? " (".concat(file, ")") : "") : file).concat(loc ? " ".concat(loc) : "") : ""); - body += item.message || ""; - } - - return { - header: header, - body: body - }; -} // Compilation with errors (e.g. syntax error or missing modules). - -/** - * @param {string} type - * @param {Array} messages - * @param {string | null} trustedTypesPolicyName - */ - - -function show(type, messages, trustedTypesPolicyName) { - ensureOverlayExists(function () { - messages.forEach(function (message) { - var entryElement = document.createElement("div"); - var typeElement = document.createElement("span"); - - var _formatProblem = formatProblem(type, message), - header = _formatProblem.header, - body = _formatProblem.body; - - typeElement.innerText = header; - typeElement.style.color = "#".concat(colors.red); // Make it look similar to our terminal. - - var text = ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default()((0,html_entities__WEBPACK_IMPORTED_MODULE_1__.encode)(body)); - var messageTextNode = document.createElement("div"); - messageTextNode.innerHTML = overlayTrustedTypesPolicy ? overlayTrustedTypesPolicy.createHTML(text) : text; - entryElement.appendChild(typeElement); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(messageTextNode); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(document.createElement("br")); - /** @type {HTMLDivElement} */ - - containerElement.appendChild(entryElement); - }); - }, trustedTypesPolicyName); -} - - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/socket.js": -/*!**********************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/socket.js ***! - \**********************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "client": function() { return /* binding */ client; } -/* harmony export */ }); -/* harmony import */ var _clients_WebSocketClient_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clients/WebSocketClient.js */ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js"); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -/* provided dependency */ var __webpack_dev_server_client__ = __webpack_require__(/*! ./node_modules/webpack-dev-server/client/clients/WebSocketClient.js */ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js"); -/* global __webpack_dev_server_client__ */ - - // this WebsocketClient is here as a default fallback, in case the client is not injected - -/* eslint-disable camelcase */ - -var Client = // eslint-disable-next-line no-nested-ternary -typeof __webpack_dev_server_client__ !== "undefined" ? typeof __webpack_dev_server_client__.default !== "undefined" ? __webpack_dev_server_client__.default : __webpack_dev_server_client__ : _clients_WebSocketClient_js__WEBPACK_IMPORTED_MODULE_0__["default"]; -/* eslint-enable camelcase */ - -var retries = 0; -var maxRetries = 10; // Initialized client is exported so external consumers can utilize the same instance -// It is mutable to enforce singleton -// eslint-disable-next-line import/no-mutable-exports - -var client = null; -/** - * @param {string} url - * @param {{ [handler: string]: (data?: any, params?: any) => any }} handlers - * @param {number} [reconnect] - */ - -var socket = function initSocket(url, handlers, reconnect) { - client = new Client(url); - client.onOpen(function () { - retries = 0; - - if (typeof reconnect !== "undefined") { - maxRetries = reconnect; - } - }); - client.onClose(function () { - if (retries === 0) { - handlers.close(); - } // Try to reconnect. - - - client = null; // After 10 retries stop trying, to prevent logspam. - - if (retries < maxRetries) { - // Exponentially increase timeout to reconnect. - // Respectfully copied from the package `got`. - // eslint-disable-next-line no-restricted-properties - var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100; - retries += 1; - _utils_log_js__WEBPACK_IMPORTED_MODULE_1__.log.info("Trying to reconnect..."); - setTimeout(function () { - socket(url, handlers, reconnect); - }, retryInMs); - } - }); - client.onMessage( - /** - * @param {any} data - */ - function (data) { - var message = JSON.parse(data); - - if (handlers[message.type]) { - handlers[message.type](message.data, message.params); - } - }); -}; - -/* harmony default export */ __webpack_exports__["default"] = (socket); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/createSocketURL.js": -/*!*************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/createSocketURL.js ***! - \*************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/** - * @param {{ protocol?: string, auth?: string, hostname?: string, port?: string, pathname?: string, search?: string, hash?: string, slashes?: boolean }} objURL - * @returns {string} - */ -function format(objURL) { - var protocol = objURL.protocol || ""; - - if (protocol && protocol.substr(-1) !== ":") { - protocol += ":"; - } - - var auth = objURL.auth || ""; - - if (auth) { - auth = encodeURIComponent(auth); - auth = auth.replace(/%3A/i, ":"); - auth += "@"; - } - - var host = ""; - - if (objURL.hostname) { - host = auth + (objURL.hostname.indexOf(":") === -1 ? objURL.hostname : "[".concat(objURL.hostname, "]")); - - if (objURL.port) { - host += ":".concat(objURL.port); - } - } - - var pathname = objURL.pathname || ""; - - if (objURL.slashes) { - host = "//".concat(host || ""); - - if (pathname && pathname.charAt(0) !== "/") { - pathname = "/".concat(pathname); - } - } else if (!host) { - host = ""; - } - - var search = objURL.search || ""; - - if (search && search.charAt(0) !== "?") { - search = "?".concat(search); - } - - var hash = objURL.hash || ""; - - if (hash && hash.charAt(0) !== "#") { - hash = "#".concat(hash); - } - - pathname = pathname.replace(/[?#]/g, - /** - * @param {string} match - * @returns {string} - */ - function (match) { - return encodeURIComponent(match); - }); - search = search.replace("#", "%23"); - return "".concat(protocol).concat(host).concat(pathname).concat(search).concat(hash); -} -/** - * @param {URL & { fromCurrentScript?: boolean }} parsedURL - * @returns {string} - */ - - -function createSocketURL(parsedURL) { - var hostname = parsedURL.hostname; // Node.js module parses it as `::` - // `new URL(urlString, [baseURLString])` parses it as '[::]' - - var isInAddrAny = hostname === "0.0.0.0" || hostname === "::" || hostname === "[::]"; // why do we need this check? - // hostname n/a for file protocol (example, when using electron, ionic) - // see: https://github.com/webpack/webpack-dev-server/pull/384 - - if (isInAddrAny && self.location.hostname && self.location.protocol.indexOf("http") === 0) { - hostname = self.location.hostname; - } - - var socketURLProtocol = parsedURL.protocol || self.location.protocol; // When https is used in the app, secure web sockets are always necessary because the browser doesn't accept non-secure web sockets. - - if (socketURLProtocol === "auto:" || hostname && isInAddrAny && self.location.protocol === "https:") { - socketURLProtocol = self.location.protocol; - } - - socketURLProtocol = socketURLProtocol.replace(/^(?:http|.+-extension|file)/i, "ws"); - var socketURLAuth = ""; // `new URL(urlString, [baseURLstring])` doesn't have `auth` property - // Parse authentication credentials in case we need them - - if (parsedURL.username) { - socketURLAuth = parsedURL.username; // Since HTTP basic authentication does not allow empty username, - // we only include password if the username is not empty. - - if (parsedURL.password) { - // Result: : - socketURLAuth = socketURLAuth.concat(":", parsedURL.password); - } - } // In case the host is a raw IPv6 address, it can be enclosed in - // the brackets as the brackets are needed in the final URL string. - // Need to remove those as url.format blindly adds its own set of brackets - // if the host string contains colons. That would lead to non-working - // double brackets (e.g. [[::]]) host - // - // All of these web socket url params are optionally passed in through resourceQuery, - // so we need to fall back to the default if they are not provided - - - var socketURLHostname = (hostname || self.location.hostname || "localhost").replace(/^\[(.*)\]$/, "$1"); - var socketURLPort = parsedURL.port; - - if (!socketURLPort || socketURLPort === "0") { - socketURLPort = self.location.port; - } // If path is provided it'll be passed in via the resourceQuery as a - // query param so it has to be parsed out of the querystring in order for the - // client to open the socket to the correct location. - - - var socketURLPathname = "/ws"; - - if (parsedURL.pathname && !parsedURL.fromCurrentScript) { - socketURLPathname = parsedURL.pathname; - } - - return format({ - protocol: socketURLProtocol, - auth: socketURLAuth, - hostname: socketURLHostname, - port: socketURLPort, - pathname: socketURLPathname, - slashes: true - }); -} - -/* harmony default export */ __webpack_exports__["default"] = (createSocketURL); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js": -/*!********************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js ***! - \********************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/** - * @returns {string} - */ -function getCurrentScriptSource() { - // `document.currentScript` is the most accurate way to find the current script, - // but is not supported in all browsers. - if (document.currentScript) { - return document.currentScript.getAttribute("src"); - } // Fallback to getting all scripts running in the document. - - - var scriptElements = document.scripts || []; - var scriptElementsWithSrc = Array.prototype.filter.call(scriptElements, function (element) { - return element.getAttribute("src"); - }); - - if (scriptElementsWithSrc.length > 0) { - var currentScript = scriptElementsWithSrc[scriptElementsWithSrc.length - 1]; - return currentScript.getAttribute("src"); - } // Fail as there was no script to use. - - - throw new Error("[webpack-dev-server] Failed to get current script source."); -} - -/* harmony default export */ __webpack_exports__["default"] = (getCurrentScriptSource); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/log.js": -/*!*************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/log.js ***! - \*************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "log": function() { return /* binding */ log; }, -/* harmony export */ "setLogLevel": function() { return /* binding */ setLogLevel; } -/* harmony export */ }); -/* harmony import */ var _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modules/logger/index.js */ "./node_modules/webpack-dev-server/client/modules/logger/index.js"); -/* harmony import */ var _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0__); - -var name = "webpack-dev-server"; // default level is set on the client side, so it does not need -// to be set by the CLI or API - -var defaultLevel = "info"; // options new options, merge with old options - -/** - * @param {false | true | "none" | "error" | "warn" | "info" | "log" | "verbose"} level - * @returns {void} - */ - -function setLogLevel(level) { - _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default().configureDefaultLogger({ - level: level - }); -} - -setLogLevel(defaultLevel); -var log = _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default().getLogger(name); - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/parseURL.js": -/*!******************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/parseURL.js ***! - \******************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _getCurrentScriptSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getCurrentScriptSource.js */ "./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js"); - -/** - * @param {string} resourceQuery - * @returns {{ [key: string]: string | boolean }} - */ - -function parseURL(resourceQuery) { - /** @type {{ [key: string]: string }} */ - var options = {}; - - if (typeof resourceQuery === "string" && resourceQuery !== "") { - var searchParams = resourceQuery.slice(1).split("&"); - - for (var i = 0; i < searchParams.length; i++) { - var pair = searchParams[i].split("="); - options[pair[0]] = decodeURIComponent(pair[1]); - } - } else { - // Else, get the url from the
    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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),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,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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;is||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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 9b2f37efd..51fc22eeb 100644 --- a/dist/leaflet.distortableimage.js.map +++ b/dist/leaflet.distortableimage.js.map @@ -1 +1 @@ -{"version":3,"file":"leaflet.distortableimage.js","mappings":"kCAAAA,EAAEC,sBAAwBD,EAAEE,aAAaC,OAAO,CAC9CC,QAAS,CACPC,UAAU,EACVC,WAAY,CACVC,eAAgB,iCAChBC,UAAW,0BACXC,UAAW,kCAIfC,WAV8C,SAUnCN,GACTJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEE,aAAaW,UAAUH,WAAWI,KAAKF,KAAMR,GAC/CJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAKP,SAAWO,KAAKR,QAAQC,UAG/BY,MAlB8C,SAkBxCC,GACJlB,EAAEE,aAAaW,UAAUI,MAAMH,KAAKF,KAAMM,GAE1CN,KAAKO,KAAOD,EAERN,KAAKP,UAAYO,KAAKQ,QAAQC,SAMlCT,KAAKU,GAAG,WAAYV,KAAKW,WAAYX,MACrCA,KAAKU,GAAG,cAAeV,KAAKY,cAAeZ,OAG7Ca,SAjC8C,WAkCxCb,KAAKQ,SAAWR,KAAKQ,QAAQM,UAEjCd,KAAKe,IAAI,WAAYf,KAAKW,WAAYX,MACtCA,KAAKe,IAAI,cAAef,KAAKY,cAAeZ,OAG9CW,WAxC8C,SAwCnCK,GACT,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASR,GAAGO,EAAO,CACnBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASR,GAAGO,EAAMM,aAAc,CAChCC,UAAWxB,KAAKyB,gBAEhBC,YAAa1B,KAAK2B,uBACjB3B,OAGLY,cAvD8C,SAuDhCI,GACZ,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASH,IAAIE,EAAO,CACpBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASH,IAAIE,EAAMM,aAAc,CACjCC,UAAWxB,KAAKyB,gBAChBC,YAAa1B,KAAK2B,uBACjB3B,OAGL2B,sBArE8C,SAqExBX,GAAG,WAClBhB,KAAKP,WAEVuB,EAAEY,iBAEF5B,KAAK6B,WAAU,SAACZ,GACd,IAAMa,EAAOb,EAAMT,QACfS,EAAMM,eAAiBP,EAAEe,QAAUD,EAAKE,YAC1C5C,EAAE6C,QAAQC,YAAYjB,EAAMM,aAAc,aACtC,EAAKY,gBACPlB,EAAMmB,WACN,EAAK5B,QAAQ6B,eAEb,EAAK7B,QAAQ8B,uBAMrBC,YAxF8C,SAwFlCC,GACV,OAAOpD,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAGlDY,aA5F8C,WA8F5C,OADiBnC,KAAK0C,YACNC,KAAK3C,KAAKuC,YAAYK,KAAK5C,QAG7C6C,iBAjG8C,SAiG7B7B,EAAGC,GACdD,EAAE8B,UAEA7B,EAAMT,QAAQwB,WAChB5C,EAAE6C,QAAQC,YAAYlB,EAAEe,OAAQ,aAIhC/B,KAAKmC,eAAkBlB,EAAMmB,WAC1BpC,KAAKQ,QAAQ8B,kBAGtBb,gBA7G8C,SA6G9BT,GAAG,WACZhB,KAAKP,WAEVO,KAAK6B,WAAU,SAACZ,GACVA,EAAMM,eAAiBP,EAAEe,OAC3Bd,EAAMmB,WAEN,EAAKS,iBAAiB7B,EAAGC,MAIzBD,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCI,mBA3H8C,SA2H3BJ,GACjB,IAEIgC,EAFER,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAGZP,KAAKuC,YAAYC,IAEtBxC,KAAK6B,WAAU,SAACZ,GAGd,IAFAA,EAAMgC,iBAAmB,GACzBhC,EAAMmB,WACDY,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACtB,IAAME,EAAIjC,EAAMkC,UAAUH,GAC1B/B,EAAMgC,iBAAiBD,GAAK1C,EAAI8C,mBAAmBF,QAKzD5B,cA5I8C,SA4IhCN,GACZ,IAAMwB,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAEjB,GAAKP,KAAKuC,YAAYC,GAAtB,CAEA,IAAMa,EAAU/C,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDG,EAAQd,EAAQS,iBAAiB,GAAGM,SAASF,GAEnDrD,KAAKwD,4BAA4BF,EAAOd,KAG1CiB,UAxJ8C,WAwJlC,WAGV,OAFiBzD,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAQ,EAAKrB,YAAYtB,IAAmB,SAAT0C,MAIvCE,QAjK8C,SAiKtCrB,GAAS,WAGf,OAFiBxC,KAAK0C,YAENgB,QAAO,SAACzC,GACtB,IAAM0C,EAAO1C,EAAMT,QAAQoD,MAC3B,OAAO3C,IAAUuB,GAAW,EAAKD,YAAYtB,IAAmB,SAAT0C,MAI3DH,4BA1K8C,SA0KlBF,EAAOd,GACjC,IAEIQ,EAFEc,EAAe9D,KAAK6D,QAAQrB,GAC5BuB,EAAI,IAAI3E,EAAE4E,eAAe,GAAIV,EAAMW,EAAG,GAAIX,EAAMY,GAGtDJ,EAAaK,SAAQ,SAAClD,GACpB,IAAMmD,EAAc,GACpB,IAAKpB,EAAI,EAAGA,EAAI,EAAGA,IACjBoB,EAAYpB,GAAKe,EAAEM,UAAUpD,EAAMgC,iBAAiBD,IAEtD/B,EAAMqD,qBAAqBF,OAI/BG,kBAxL8C,SAwL5BC,GAIhB,OAHeA,EAAKC,QAAO,SAASC,EAAKC,GACvC,OAAOD,EAAMC,EAAIC,eAChB,GACaJ,EAAKK,QAGvBC,mBA/L8C,WAgM5C,IAAMC,EAAO,CACbA,OAAc,IA4Bd,OA1BA/E,KAAK6B,WAAU,SAASZ,GACtB,GAAIjB,KAAKuC,YAAYtB,GAAQ,CAC3B,IAAM+D,EAAW/D,EAAMgE,OAAOC,IAAIC,MAAM,KAClCC,EAAWJ,EAASA,EAASH,OAAO,GACpCQ,EAAKpE,EAAMqE,aACXC,EAAU,CACd,CAACC,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,MAE9BX,EAAKY,OAAOC,KAAK,CACfC,GAAI7F,KAAK8F,WAAW7E,GACpBiE,IAAKjE,EAAMgE,OAAOC,IAClBa,MAAO9E,EAAMgE,OAAOc,MACpBC,OAAQ/E,EAAMgE,OAAOe,OACrBC,gBAAiBb,EACjBc,MAAOX,EACPX,aAAcxF,EAAE+G,UAAUC,cAAcnF,QAG3CjB,MAEH+E,EAAKY,OAASZ,EAAKY,OAAOU,UAC1BtB,EAAKuB,iBAAmBtG,KAAKuE,kBAAkBQ,EAAKY,QAE7CZ,KAIX3F,EAAEmH,sBAAwB,SAASV,EAAIrG,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBwG,EAAIrG,K,eClOzCJ,EAAEoH,wBAA0BpH,EAAEqH,aAAalH,OAAO,CAEhDC,QAAS,CACPwG,OAAQ,IACRU,aAAa,EAEbC,aAAc,GACdlH,UAAU,EACVkE,KAAM,UACNiD,UAAU,GAGZ9G,WAZgD,SAYrC+G,EAAKrH,GACdJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAK2G,aAAe3G,KAAKR,QAAQmH,aACjC3G,KAAKP,SAAWO,KAAKR,QAAQC,SAC7BO,KAAK8G,UAAY9G,KAAKR,QAAQoH,SAC9B5G,KAAK+G,KAAOF,EACZ7G,KAAKgH,SAAW,IAGlB3G,MAvBgD,SAuB1CC,GAAK,WACTN,KAAKO,KAAOD,EACPN,KAAKuB,cAAgBvB,KAAKiH,aAE/B3G,EAAII,GAAG,YAAaV,KAAKkH,OAAQlH,MAE7BA,KAAKR,QAAQ+F,UACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QACzBjF,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAYV,KAAKuH,aAAcvH,OAK1CZ,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAAQ,WAIvC,GAHA,EAAKiG,UAAUC,YAAY,EAAKlG,cAChC,EAAKmG,uBAED,EAAKlI,QAAQwH,SAAU,CACzB,IAAMW,EAAQ,EAAKnI,QAAQwH,SAASY,KAAO,EAAI,MAAQ,MACvD,EAAKC,SAAS,EAAKrI,QAAQwH,SAASW,GAAQA,QAE5C,EAAKX,SAAW,CAACY,IAAK,EAAGE,IAAK,GAC9B,EAAKZ,SAIF,EAAKC,UACJ7G,EAAId,QAAQ4H,eAAiBhI,EAAEiI,QAAQC,OACzChH,EAAII,GAAG,WAAY,EAAK6G,aAAc,GAK1C,IAAMQ,EAAe,EAAKC,cACtBD,GACF,EAAKE,GAAKF,EAAaG,OAAOC,KAAKJ,GAAc,IAC7C,EAAKE,GAAGxI,UAAY,EAAKe,QAAQC,WAEjC,EAAKhB,UAAY,EAAKe,QAAQC,SAClC,EAAKwH,GAAK,SAId7I,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACvDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MAMGM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAG7CA,KAAK6I,KAAK,QAGZhI,SArFgD,SAqFvCP,GACPlB,EAAE8B,SAASH,IAAIf,KAAKuB,aAAc,QAASvB,KAAKoI,OAAQpI,MACxDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,cACjB1I,MACHZ,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAExCA,KAAKQ,SAAWR,KAAKQ,QAAQM,UACjCd,KAAK6I,KAAK,UAEVzJ,EAAEqH,aAAaxG,UAAUY,SAASX,KAAKF,KAAMM,IAG/CoH,qBApGgD,WAqG9C,IAAMpH,EAAMN,KAAKO,KACXuI,EAAqB1J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,SAC3DyH,EAAsB5J,EAAE6C,QAAQ8G,SAAS/I,KAAKuB,aAAc,UAC5D0H,EACFC,SAASJ,GAAsBI,SAASF,GACtCG,EAAcnJ,KAAKR,QAAQwG,OAC3BoD,EAAaF,SAASD,EAAcE,GACpCE,EAAS/I,EAAIgJ,QAAQhJ,EAAIiJ,aACzBC,EAASpK,EAAEqK,MAAML,EAAYD,GAAaO,SAAS,GACrD1J,KAAKR,QAAQ+F,QACfvF,KAAKmH,SAAWnH,KAAKR,QAAQ+F,QAE7BvF,KAAKmH,SAAW,CACd7G,EAAIqJ,UAAUN,EAAO9F,SAASiG,IAC9BlJ,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,KACnD5D,EAAIqJ,UAAUN,EAAOO,IAAIJ,KAI7BxJ,KAAK6J,mBAAqB,CACxB,OAAUR,EACV,OAAUG,EACV,KAAQlJ,EAAIwJ,WAGd9J,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,gBAGrCoD,aAlIgD,SAkInC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKoC,YAIvCkG,sBAvIgD,WAwI9C,IAAMhI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAC5CZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKoC,SAAUpC,OAGnDwI,qBA7IgD,WA8I9C,IAAMlI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAC3CZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKoC,SAAUpC,OAGpDkK,WAnJgD,WAoJ9C,OAAOlK,KAAK8G,WAGd1E,SAvJgD,WAwJ9C,IAAMN,EAAO9B,KAAKQ,QAClB,GAAKsB,EAAKE,UAOV,OALAF,EAAKQ,iBACLR,EAAKqI,eAELnK,KAAK8G,WAAY,EACjB9G,KAAK6I,KAAK,YACH7I,MAGToI,OAnKgD,SAmKzCpH,GACL,IAAMc,EAAO9B,KAAKQ,QACZyH,EAAKjI,KAAKiI,GAEhB,GAAKnG,EAAKE,UAAV,CAYA,GAXIhB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,GAGpChB,KAAKoK,wBAELpK,KAAK8G,WAAY,EACjBhF,EAAKO,cACLP,EAAKuI,eACLrK,KAAK6I,KAAK,WAGNZ,IAAMA,EAAG9F,eAKb,OAAOnC,KAJLA,KAAKoC,aAOTgI,sBA3LgD,WA4L9CpK,KAAKO,KAAKsB,WAAU,SAACZ,GACfA,aAAiB7B,EAAEoH,yBACrBvF,EAAMmB,eAKZkI,UAnMgD,SAmMtCC,EAAQC,GAChB,IAAM1I,EAAO9B,KAAKQ,QAalB,OAXAR,KAAKmH,SAASoD,GAAUC,EAExBxK,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT8K,sBApNgD,SAoN1BC,EAAMR,EAAQjK,GAClC,OAAIA,EAAId,QAAQwL,IAAIC,QAAU7L,EAAE8L,IAAID,SAKrB,IAATF,GACFI,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI,EACrCkH,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,GAAK,MAEzCiH,EAAa7K,EAAIgJ,QAAQiB,GAAQrG,EAAI6G,EAAO,EAC5CK,EAAgB9K,EAAIgJ,QAAQiB,GAAQrG,EAAImH,KAAKC,IAAI,EAAGP,IAAS,KAEvDI,GAAcC,GATtB,IAAID,EACAC,GAYRG,WArOgD,SAqOrCC,GACT,IAAMlL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAGR,IAAK,IAAMyI,KAAKD,EACd,GAAIxL,KAAK8K,sBAAsBC,EAAMS,EAAUC,GAAInL,GAIjD,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAM4C,KAAKD,EACdxL,KAAKmH,SAASnE,GAAKwI,EAAUC,GAC7BzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGTsE,qBAtQgD,SAsQ3BoH,GACnB,IAAMpL,EAAMN,KAAKO,KACXwK,EAAOzK,EAAIwJ,UACXhI,EAAO9B,KAAKQ,QACdwC,EAAI,EAER,IAAK,IAAMyI,KAAKC,EAAW,CACzB,IAAMnB,EAASjK,EAAIqL,mBAAmBD,EAAUD,IAEhD,GAAIzL,KAAK8K,sBAAsBC,EAAMR,EAAQjK,GAI3C,OAFAN,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,oBACnCtF,KAAK6I,KAAK,UAKd,IAAK,IAAM4C,KAAKC,EACd1L,KAAKmH,SAASnE,GAAK1C,EAAIqL,mBAAmBD,EAAUD,IACpDzI,GAAK,EAYP,OATAhD,KAAK+J,UAAU3K,EAAE4K,aAAahK,KAAKsF,eACnCtF,KAAK6I,KAAK,UAEN/G,EAAK2I,SAAW3I,EAAK2I,mBAAmBrL,EAAEsL,iBAAiBC,UAC7D7I,EAAK8I,oBAGP5K,KAAK6K,QAAS,EAEP7K,MAGT4L,QAxSgD,SAwSxCC,GACN,IAEI7I,EACAe,EAHEzD,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAG1BuC,EAAgB,GAEtB,GAAc,IAAVD,EAAJ,CAEA,IAAK7I,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EACCgJ,QAAQtJ,KAAKmD,UAAUH,IACvBO,SAAS8F,GACT0C,WAAWF,GACXjC,IAAIP,GACTyC,EAAc9I,GAAK1C,EAAIqJ,UAAU5F,GAKnC,OAFA/D,KAAKuL,WAAWO,GAET9L,OAGTgM,SA/TgD,WA+TzB,IAAdC,EAAc,uDAAP,MACRC,EAASlM,KAAKuB,aAAa4K,MAAM/M,EAAE6C,QAAQmK,WAC5CjH,MAAM,YAAY,GAClBkH,MAAM,GAAI,GACVlH,MAAM,KAELmH,EAAQJ,EAAO,GACfK,EAAQL,EAAO,GACfM,EAAQN,EAAO,GACfO,EAAQP,EAAO,GAEfQ,EAAcJ,EAAQG,EAAQF,EAAQC,EAExCG,EAAQvN,EAAEwN,SAASC,UAAUP,EAAOC,EAAO,OAU/C,OARIG,EAAc,IAChBC,GAASA,EAAQ,EAAItB,KAAKyB,IAAMzB,KAAKyB,IAGnCH,EAAQ,IACVA,EAAQ,EAAItB,KAAKyB,GAAKH,GAGR,QAATV,EACHZ,KAAK0B,MAAM3N,EAAEwN,SAASI,iBAAiBL,IACvCvN,EAAE6N,KAAKC,UAAUP,EAAO,IAG9B9E,SA3VgD,SA2VvC8E,GAAqB,IAAdV,EAAc,uDAAP,MACfkB,EAAenN,KAAKgM,SAASC,GAC7BmB,EAAkBT,EAAQQ,EAGhC,OAFAnN,KAAKqN,SAASD,EAAiBnB,GAExBjM,MAGTqN,SAnWgD,SAmWvCV,GAAqB,IAIxB3J,EACAe,EACAuJ,EANUrB,EAAc,uDAAP,MACf3L,EAAMN,KAAKO,KACX8I,EAAS/I,EAAIgJ,QAAQtJ,KAAKuJ,aAC1BhE,EAAU,GAShB,IAJa,QAAT0G,IACFU,EAAQvN,EAAEwN,SAASW,iBAAiBZ,IAGjC3J,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAAS8F,GAC5CiE,EAAIlO,EAAEqK,MACF4B,KAAKmC,IAAIb,GAAS5I,EAAEE,EAAIoH,KAAKoC,IAAId,GAAS5I,EAAEG,EAC5CmH,KAAKoC,IAAId,GAAS5I,EAAEE,EAAIoH,KAAKmC,IAAIb,GAAS5I,EAAEG,GAEhDqB,EAAQvC,GAAK1C,EAAIqJ,UAAU2D,EAAE1D,IAAIP,IAKnC,OAFArJ,KAAKuL,WAAWhG,GAETvF,MAGT0N,OA7XgD,SA6XzCC,EAAaC,GAClB,IACI5K,EACAe,EAFEzD,EAAMN,KAAKO,KAGXsN,EAAe,GACfvK,EAAQhD,EAAIgJ,QAAQqE,GAAapK,SAASjD,EAAIgJ,QAAQsE,IAE5D,IAAK5K,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAIzD,EAAIgJ,QAAQtJ,KAAKmD,UAAUH,IAAIO,SAASD,GAC5CuK,EAAa7K,GAAK1C,EAAIqJ,UAAU5F,GAGlC/D,KAAKuL,WAAWsC,IAGlBC,QA5YgD,WAwZ9C,IAXA,IAAMxN,EAAMN,KAAKO,KACX8I,EAASrJ,KAAK6J,mBAAmBR,OACjCG,EAASxJ,KAAK6J,mBAAmBL,OACjCuB,EAAO/K,KAAK6J,mBAAmBkB,KAC/BxF,EAAU,CACd8D,EAAO9F,SAASiG,GAChBH,EAAOO,IAAIxK,EAAEqK,MAAMD,EAAOvF,GAAIuF,EAAOtF,IACrCmF,EAAOO,IAAIxK,EAAEqK,OAAOD,EAAOvF,EAAGuF,EAAOtF,IACrCmF,EAAOO,IAAIJ,IAGJxG,EAAI,EAAGA,EAAI,EAAGA,IAChB1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,GAAMgD,OAAO/N,KAAKmD,UAAUH,KACzDhD,KAAKsK,UAAUtH,EAAG1C,EAAIqJ,UAAUpE,EAAQvC,GAAI+H,IAOhD,OAHA/K,KAAK6K,QAAS,EACd7K,KAAK6I,KAAK,WAEH7I,MAKTgO,oBAtagD,SAsa5BvE,GAOlB,IAAMwE,EAAO7O,EAAEiI,QAAQ6G,SAEjBC,GAASF,EAAO,KAAO,IAAM,IAEnC,MAHa,aAAeA,EAAO,KAAO,IAAM,IAGlCxE,EAAMxF,EAAI,MAAQwF,EAAMvF,EAAI,KAAOiK,GAGnDjH,OApbgD,WAqb9C,IAAM5G,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACb6B,EAAqBhE,EAAEwD,KAAKtC,EAAI8C,mBAAoB9C,GACpD+N,EAAkBrO,KACnBsO,8BAA8BlL,GAC7BC,EAAUD,EAAmBpD,KAAKmD,UAAU,IAC5CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,KAK5DP,EAAMjC,MAAM/M,EAAE6C,QAAQmK,UAAY,WAAa,QAE/CpM,KAAKgH,SAASY,IAAM5H,KAAKgM,WACzBhM,KAAKgH,SAASc,IAAM9H,KAAKgM,SAAS,QASpCzE,aAldgD,SAkdnCqH,GACX,IAAMtO,EAAMN,KAAKO,KACX6N,EAAQpO,KAAKuB,aACbsN,EAAwB,SAASrE,GACrC,OAAOlK,EAAIwO,uBAAuBtE,EAAQoE,EAAM7D,KAAM6D,EAAMvF,SAExDgF,EAAkBrO,KAAKsO,8BACzBO,GAEExL,EAAUwL,EAAsB7O,KAAKmD,UAAU,IAC/CoL,EAAOnP,EAAE6C,QAAQuM,gBAAgBH,GACjCI,EAAczO,KAAKgO,oBAAoB3K,GAG7C+K,EAAMM,aAAerL,EAErB+K,EAAMjC,MAAM/M,EAAE6C,QAAQmK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,MAG9DrJ,WAregD,WAse9C,OAAOtF,KAAKmH,UAGdhE,UAzegD,SAyetCH,GACR,OAAOhD,KAAKmH,SAASnE,IAIvBuG,UA9egD,WA+e9C,IAAMjJ,EAAMN,KAAKO,KACXkE,EAASzE,KAAKsF,aAAab,QAAO,SAASsK,EAAKxE,GACpD,OAAOwE,EAAInF,IAAItJ,EAAIgJ,QAAQiB,MAC1BnL,EAAEqK,MAAM,EAAG,IACd,OAAOnJ,EAAIqJ,UAAUlF,EAAOiF,SAAS,KAGvC4E,8BAtfgD,SAsflBU,GAI5B,IAIIC,EAJEzF,EAASwF,EAAkBhP,KAAKmD,UAAU,IAC1C+L,EAAIlP,KAAKuB,aAAa4N,aAAe,IACrCC,EAAIpP,KAAKuB,aAAa8N,cAAgB,IACtCnM,EAAI,GAGV,IAAK+L,EAAI,EAAGA,EAAI,EAAGA,IACjB/L,EAAE0C,KAAKoJ,EAAkBhP,KAAKmD,UAAU8L,IAAIK,UAAU9F,IAcxD,OAAOpK,EAAEmQ,WAAWC,oBAChB,EAAG,EAAGtM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAG,EAAGhM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnB,EAAGkL,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnBgL,EAAGE,EAAGlM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,MAK3B9E,EAAEqQ,wBAA0B,SAAS5J,EAAIrG,GACvC,OAAO,IAAIJ,EAAEoH,wBAAwBX,EAAIrG,IAG3CJ,EAAEsQ,IAAIC,aAAY,WACXvQ,EAAE6C,QAAQQ,SAASzC,KAAK4P,eAAgB,QAC3CxQ,EAAE6C,QAAQ4N,SAAS7P,KAAK4P,eAAgB,W,0BC9hB5CxQ,EAAE6C,QAAU7C,EAAE6C,SAAW,GACzB7C,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBqF,UAAY3Q,EAAE4Q,QAAQzQ,OAAO,CAE9CC,QAAS,CACPyQ,SAAU,YAGZnQ,WAN8C,SAMnCQ,EAAKd,GACdQ,KAAKO,KAAOD,EACZlB,EAAEW,WAAWC,KAAMR,IAGrB0Q,SAX8C,WAYvClQ,KAAKmQ,aACRnQ,KAAKoQ,WAAapQ,KAAKqQ,kBACvBrQ,KAAKsQ,eAAiBtQ,KAAKuQ,QAC3BvQ,KAAKwQ,SAAWxQ,KAAKyQ,gBACrBzQ,KAAK0Q,WAAW1Q,KAAKoQ,WAAYpQ,KAAKsQ,eAAgBtQ,KAAKwQ,UAE3DpR,EAAE8B,SAASR,GAAGV,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE7DZ,EAAE8B,SAAS0P,wBAAwB5Q,KAAKoQ,YACxChR,EAAE8B,SAAS2P,yBAAyB7Q,KAAKoQ,cAI7CU,YAzB8C,WA0BxC9Q,KAAKmQ,aACP/Q,EAAE8B,SAASH,IAAIf,KAAKwQ,SAAU,QAASxQ,KAAK2Q,iBAAkB3Q,MAE9DZ,EAAE6C,QAAQ8O,OAAO/Q,KAAKwQ,UACtBpR,EAAE6C,QAAQ8O,OAAO/Q,KAAKsQ,gBACtBlR,EAAE6C,QAAQ8O,OAAO/Q,KAAKoQ,YACtBpQ,KAAKmQ,YAAa,IAItBE,gBApC8C,WAqC5C,IAAMW,EAAY5R,EAAE6C,QAAQgP,OAAO,MAAO,sBAC1CD,EAAUE,aAAa,KAAM,iBAE7B,IAAMC,EAAU/R,EAAE6C,QAAQgP,OAAO,KAAM,WAGvC,OAFAD,EAAUvJ,YAAY0J,GAEfH,GAGTP,cA9C8C,WA+C5C,IAAMW,EAAUhS,EAAE6C,QAAQgP,OAAO,IAAK,IAUtC,OATAG,EAAQC,UAAYjS,EAAEkS,SAASL,OAAO,iBAEtCG,EAAQF,aAAa,KAAM,oBAC3BE,EAAQF,aAAa,OAAQ,KAC7BE,EAAQF,aAAa,QAAS,eAE9BE,EAAQF,aAAa,OAAQ,UAC7BE,EAAQF,aAAa,aAAc,eAE5BE,GAGTb,MA5D8C,WA6D5C,IAAMgB,EAAOnS,EAAE6C,QAAQgP,OAAO,MAAO,IAIrC,OAHAM,EAAKL,aAAa,KAAM,qBACxBK,EAAKpF,MAAMqF,QAAU,OAEdD,GAGTb,WApE8C,SAoEnCM,EAAWO,EAAME,GAC1BzR,KAAKmQ,WAAa/Q,EAAEsS,QAAQ,CAACzB,SAAUjQ,KAAKR,QAAQyQ,WAEpDjQ,KAAKmQ,WAAW9P,MAAQ,WAuBtB,OAtBA2Q,EAAUvJ,YAAY8J,GACtBA,EAAKI,mBACD,YACA,k3CAkBJX,EAAUvJ,YAAYgK,GACfT,GAGThR,KAAKmQ,WAAWyB,MAAM5R,KAAKO,OAG7BoQ,iBApG8C,SAoG7B3P,GACfA,EAAEY,iBAEF5B,KAAKoQ,WAAWyB,UACgB,kCAA9B7R,KAAKoQ,WAAWyB,UACd,qCACA,gCAGJ7R,KAAKsQ,eAAenE,MAAMqF,QACc,SAAtCxR,KAAKsQ,eAAenE,MAAMqF,QAAqB,QAAU,OAG3DxR,KAAKwQ,SAASa,UACgB,UAA5BrR,KAAKwQ,SAASa,UACZjS,EAAEkS,SAASL,OAAO,iBAClB,QAGJ7R,EAAEkS,SAASQ,YAAY9R,KAAKwQ,SAAU,cAAe,eACrDpR,EAAE6C,QAAQC,YAAYlC,KAAKwQ,SAAU,eAGvCuB,eA3H8C,WA4H5C,IAAIC,SAASC,cAAc,sBAA3B,CAEA,IAAMC,EAAK9S,EAAE6C,QAAQgP,OAAO,MAAO,IACnCiB,EAAGrM,GAAK,oBACRqM,EAAGhB,aAAa,SAAU,UAE1BlR,KAAKmS,UAAW,IAAI/S,EAAEgT,kBAAmBC,SACzCH,EAAGb,UAAYrR,KAAKmS,SAEpBH,SAASC,cAAc,8BAA8BxK,YAAYyK,OAIrE9S,EAAEsL,iBAAiBqF,UAAUJ,aAAY,WACvCvQ,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACrClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GACvClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,GAAK,EAC5C,EAGgD,IAA9ClT,EAAEsL,iBAAiBqF,UAAU9P,UAAUqS,IAAalT,EAAEiI,QAAQkL,SAChE,EAAK9R,SACL,EAAKsR,qBAIT3S,EAAE0Q,iBAAiB0C,UAAY,SAAClS,EAAKd,GACnC,OAAO,IAAIJ,EAAEsL,iBAAiBqF,UAAUzP,EAAKd,K,eC3J/CJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEC,sBAAsBoT,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CAC9CC,QAAS,CACPkT,OAAQtT,EAAE0Q,iBAAiB6C,kBAG7B7S,WAL8C,SAKnC8S,EAAOpT,GAChBQ,KAAK6S,OAASD,EACd5S,KAAK8S,YAAcF,EAAMpT,QAAQE,WAEjCN,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB6C,iBAAiBI,OAAS,iBAG/C7C,SAd8C,WAe5C,IACM5P,EADQN,KAAK6S,OACDtS,KAElBP,KAAKgT,YAAchT,KAAKR,QAAQyT,QAChCjT,KAAKkT,YACD9T,EAAEwD,KAAKxD,EAAEe,MAAMgT,aAAanT,KAAM,cAAe,aACjDA,KAAKoT,YAAapT,MAEtBZ,EAAE8B,SAASR,GAAGsR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE9CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAGlDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQC,aAG/CqQ,YAxC8C,WAyC5C,IACMxQ,EADQN,KAAK6S,OACDtS,KAElBnB,EAAE8B,SAASH,IAAIiR,SAAU,UAAWhS,KAAKqT,WAAYrT,MAE/CM,EAAIqI,gBAAgB3G,WAAa1B,EAAIsI,kBAAkB5G,WAC3D5C,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MAGnDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClB+H,cAAerI,KAAKsI,sBACpBC,eAAgBvI,KAAKwI,qBACrBC,YAAazI,KAAK0I,aAClB6K,cAAevT,KAAKwT,iBACnBxT,MAEHA,KAAKsT,gBACLtT,KAAK6S,OAAOpT,UAAW,EACvBO,KAAK6S,OAAOhR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQM,cAG/CL,OA9D8C,WAiE5C,OAFAT,KAAKyT,UAAW,EAChBzT,KAAKkQ,WACElQ,MAGTc,QApE8C,WAuE5C,OAFAd,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAGTqT,WA1E8C,SA0EnCrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KAExB3T,KAAK0T,IAEN1T,KAAK6S,OAAO1Q,gBACdnC,KAAK0T,GAAaxT,KAAKF,OAI3B0I,aArF8C,SAqFjC1H,GACI,gBAAXA,EAAEiJ,MAA0BjK,KAAKsT,cAActS,IAIrDsH,sBA1F8C,WA2F5C,IAAMhI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKsT,cAAetT,MACjDZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKsT,cAAetT,OAGxDwI,qBAhG8C,WAiG5C,IAAMlI,EAAMN,KAAK6S,OAAOtS,KACxBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKsT,cAAetT,MAChDZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKsT,cAAetT,OAGzDsT,cAtG8C,SAsGhCtS,GACZ,IAAI4S,EAEA5S,IAAK4S,EAAK5S,EAAE6S,eAKZD,IAAOA,EAAG9Q,UAAY8Q,EAAG7R,kBAAkB+R,oBAI/C9T,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB7B,EAAE6C,QAAQ8R,YAAY9S,EAAMM,aAAc,aAC1CN,EAAMmB,cAGRpC,KAAKsC,iBAEDtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,KAGtCgT,aA5H8C,WA4H/B,WACRhU,KAAKiU,QAAQ7U,EAAE8U,eAEpBlU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd2T,UAELlT,EAAMmB,gBAKZgS,WAzI8C,WAyIjC,WACNpU,KAAKiU,QAAQ7U,EAAEiV,aAEpBrU,KAAK6S,OAAOhR,WAAU,SAACZ,GACjB,EAAK4R,OAAOtQ,YAAYtB,KACbA,EAAMT,QACd8T,QAELlV,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CiS,gBAtJ8C,SAsJ9BxS,GAAG,WACXuT,EAAMvT,EAAEwT,iBACRlU,EAAMN,KAAK6S,OAAOtS,KAExBP,KAAK6S,OAAOhR,WAAU,SAACZ,GACrB,IAAMa,EAAOb,EAAMT,QAEfS,EAAMiJ,cAAgBjJ,EAAMmB,WAEhC,IAAM2I,EAAOzK,EAAIwJ,UACXT,EAAS/I,EAAIiJ,YACfkL,EAAYrV,EAAE4K,aAAa/I,EAAMkC,UAAU,GAAIlC,EAAMkC,UAAU,IAEnEsR,EAAYnU,EAAIoU,8BAA8BD,EAAW1J,EAAM1B,GAC3DkL,EAAII,WAAWF,IAAc3S,EAAKE,YAC/B,EAAKyI,SAAW,EAAKpI,cAC1BjD,EAAE6C,QAAQ4N,SAAS5O,EAAMM,aAAc,kBAK7CqT,aA3K8C,SA2KjC5T,GAAG,WACd,GAAKhB,KAAKiU,QAAQ7U,EAAEyV,cAApB,CAEA,IAAMC,EAAiB9U,KAAK6S,OAAOpP,YAC7BsR,EAAID,EAAejQ,OAEf,IAANkQ,IAEW3V,EAAE6C,QAAQ+S,eAAeD,KAGtCD,EAAe3Q,SAAQ,SAAClD,GACtB,EAAK4R,OAAOoC,YAAYhU,MAErBjB,KAAK6S,OAAO1Q,gBACfnC,KAAKsC,kBAILtB,GAAK5B,EAAE8B,SAAS6B,gBAAgB/B,MAGtCkU,aAjM8C,WAkMvClV,KAAKmV,mBACRnV,KAAK8S,YAAYsC,gBAAaC,GAGhCC,cAActV,KAAKuV,iBAGrBlT,YAzM8C,WA0M5C,IAAMuQ,EAAQ5S,KAAK6S,OACbvS,EAAMsS,EAAMrS,KAEdqS,EAAMpT,QAAQgW,iBAAmBxV,KAAKyK,UAE1CzK,KAAKyK,QAAUrL,EAAE0Q,iBAAiB2F,WAAW,CAC3CxC,QAASjT,KAAKgT,YACd/C,SAAU,YACT2B,MAAMtR,EAAKsS,KAGhBtQ,eArN8C,WAsN5C,IAAMhC,EAAMN,KAAK6S,OAAOtS,KACxB,IAAIP,KAAKyK,QAIP,OAAO,EAHPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,GAMnBwJ,QA/N8C,SA+NtCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDE,QAnO8C,SAmOtCF,GAMN,MALwB,yBAApBA,EAAMG,WAAyC7V,KAAKiU,QAAQyB,KAC9D1V,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,eAEArC,MAGT8V,WA5O8C,SA4OnCJ,GAAO,WAWhB,OAVA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,OAAI,EAAKhD,YAAYgD,KAASN,IAC5B,EAAKpT,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,eACE,MAKJrC,MAGToT,YA1P8C,WA0PhC,WACZ,GAAKpT,KAAKiU,QAAQ7U,EAAE8W,cAEpB,OAAO,IAAIC,SAAQ,SAACC,GAClB,IAGIxW,EAHEyW,EAAO,EAAKvD,YAClBuD,EAAKD,QAAUA,EAGf,EAAKb,eAAiB,KAmEtB,EAAKJ,mBAAqBkB,EAAKjB,WAC1B,EAAKD,mBACRkB,EAAKjB,WAAa,EAAKvC,OAAO/N,qBAAqBa,QAGrD0Q,EAAKC,UAAYD,EAAKC,WAAa,IACnCD,EAAKxK,MAAQwK,EAAKxK,OAAS,IAC3BwK,EAAKE,QAAUF,EAAKE,SAvEI,SAACC,IACvBA,EAAOC,KAAKC,MAAMF,IAETG,aACH/W,IAAc4W,EAAKG,YAAcH,EAAKG,WAAWC,MAAM,WAIzDhX,EAAY4W,EAAKG,YAIC,aAAhBH,EAAKK,SACPvB,cAAc,EAAKC,gBAEd,EAAKJ,mBACR,EAAKrC,YAAYsC,gBAAaC,GAGhCe,IACiB,OAAbI,EAAKM,KACPC,MAAM,qBAAuBV,EAAKxW,UAAY2W,EAAKM,MAMvDE,QAAQC,IAAIT,KA6ChBH,EAAKa,gBAAkBb,EAAKa,iBAvCI,SAACV,GAC/B5W,EAAYyW,EAAKzW,UAAY4W,EAE7B,EAAKjB,eAAiB4B,aAAY,WAChC,IACMC,EAAM,IAAIC,QAAJ,UAAezX,EAAf,YAA4B0X,KAAKC,OAD7B,CAACC,OAAQ,QAEzBC,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKrB,EAAKE,WACZF,EAAKC,YA6BVD,EAAKyB,eAAiBzB,EAAKyB,gBAzBI,SAACC,GAC9B,IAAMC,EAAO,IAAIC,SACjBD,EAAKE,OAAO,aAAczB,KAAK0B,UAAUJ,EAAW3C,aACpD4C,EAAKE,OAAO,QAASH,EAAWlM,OAChCmM,EAAKE,OAAO,UAAU,GAEtB,IAAME,EAAU,CAACZ,OAAQ,OAAQa,KAAML,GACjCZ,EAAM,IAAIC,QAAQU,EAAWpY,eAAgByY,GACnDX,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKK,EAAWb,kBAerBb,EAAKyB,eAAezB,SAK1BjX,EAAEmH,sBAAsBzE,KAAO,SAAC8Q,EAAOpT,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBoT,KAAKG,EAAOpT,K,eCzVjDJ,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAG3CtL,EAAEsL,iBAAiB+H,KAAOrT,EAAE4Q,QAAQzQ,OAAO,CACzCC,QAAS,CACP8Y,QAAS,GACTC,QAAS,gBACT7F,OAAQtT,EAAE0Q,iBAAiB0I,YAG7B1Y,WAPyC,SAO9B0C,EAAShD,GAClBQ,KAAKyY,SAAWjW,EAChBxC,KAAK0Y,eAAgB,EACrB1Y,KAAK4D,MAAQpB,EAAQhD,QAAQmE,KAC7B3D,KAAK2Y,cAAe,EACpB3Y,KAAK4Y,WAAY,EACjB5Y,KAAK6Y,SAAWrZ,EAAQ8Y,QAExBlZ,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE0Q,iBAAiB0I,WAAWzF,OAAS,aAIzC7C,SArByC,WAsBvC,IAAM1N,EAAUxC,KAAKyY,SAErBzY,KAAKgT,YAAchT,KAAKR,QAAQyT,QAGhCzQ,EAAQsW,eACR9Y,KAAK+Y,aACL/Y,KAAKgZ,eACLhZ,KAAKiZ,4BAEDzW,EAAQ0H,eAAiB1H,EAAQhD,QAAQgW,iBAC3CxV,KAAKqC,cAGPrC,KAAKkZ,cAAc1W,EAAQyF,IAAKzF,EAAQyF,GAExC7I,EAAE8B,SAASR,GAAG8B,EAAQjB,aAAc,CAClC4X,SAAUnZ,KAAKoZ,UACdpZ,MAEHZ,EAAE8B,SAASR,GAAG2Y,OAAQ,UAAWrZ,KAAKqT,WAAYrT,OAIpD8Q,YA9CyC,WA+CvC,IAAMtO,EAAUxC,KAAKyY,SACfxQ,EAAKjI,KAAKkZ,YAOhB,IAAK,IAAMI,KAJXtZ,KAAKuZ,mBAEDvZ,KAAKyK,SAAWzK,KAAKsC,iBAEJtC,KAAKwZ,SACxBpa,EAAE6C,QAAQ8O,OAAOuI,GAOfla,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAC3CnC,EAAE6C,QAAQ8R,YAAYvR,EAAQjB,aAAc,aAG1C0G,IAAQA,EAAG9F,gBAAkB8F,EAAGzH,QAAQiK,SAC1CxC,EAAGzH,QAAQ8B,iBAGblD,EAAE8B,SAASH,IAAIyB,EAAQjB,aAAc,CACnC4X,SAAUnZ,KAAKoZ,UACdpZ,MAEHZ,EAAE8B,SAASH,IAAIsY,OAAQ,UAAWrZ,KAAKqT,WAAYrT,OAGrDc,QA9EyC,WA+EvC,OAAKd,KAAKyT,UAEVzT,KAAKyY,SAASrW,WACdpC,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MALsBA,MAQ/B+Y,WAvFyC,WA2FvC,IAAK,IAAMpV,KAHX3D,KAAKyZ,OAAS,GAGKra,EAAEsL,iBAAiB+H,KAAKiH,MAAO,CAChD,IAAM/D,EAASvW,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,IACH,IAAtC3D,KAAKgT,YAAY2G,QAAQhE,KAC3B3V,KAAKyZ,OAAO9V,GAAQgS,GAMnB3V,KAAKyZ,OAAOzZ,KAAK4D,SACpB5D,KAAK4D,MAAQsE,OAAOC,KAAKnI,KAAKyZ,QAAQ,KAK1CT,aA1GyC,WA2GvC,IACIhW,EADER,EAAUxC,KAAKyY,SAIrB,IADAzY,KAAK4Z,aAAexa,EAAEya,aACjB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAK4Z,aAAaE,SAAS1a,EAAE2a,WAAWvX,EAASQ,IAInD,IADAhD,KAAKga,cAAgB5a,EAAEya,aAClB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKga,cAAcF,SAAS1a,EAAE6a,YAAYzX,EAASQ,IAIrD,IADAhD,KAAKka,gBAAkB9a,EAAEya,aACpB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKka,gBAAgBJ,SAAS1a,EAAE+a,cAAc3X,EAASQ,IAIzD,IADAhD,KAAKoa,eAAiBhb,EAAEya,aACnB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKoa,eAAeN,SAAS1a,EAAEib,aAAa7X,EAASQ,IAKvD,IADAhD,KAAKsa,mBAAqBlb,EAAEya,aACvB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKsa,mBAAmBR,SAAS1a,EAAEmb,iBAAiB/X,EAASQ,IAI/D,IADAhD,KAAKwa,aAAepb,EAAEya,aACjB7W,EAAI,EAAGA,EAAI,EAAGA,IACjBhD,KAAKwa,aAAaV,SAAS1a,EAAEqb,WAAWjY,EAASQ,EAAG,CAAC0X,WAAW,KAGlE1a,KAAKwZ,SAAW,CACdnY,KAAMrB,KAAK4Z,aACX/N,MAAO7L,KAAKga,cACZW,QAAS3a,KAAKka,gBACdU,OAAQ5a,KAAKoa,eACbS,WAAY7a,KAAKsa,mBACjBQ,KAAM9a,KAAKwa,eAIfvB,0BAvJyC,WAwJvC,IAAM8B,EAAK/a,KAAKyY,SAGXzY,KAAK4D,OAKV5D,KAAKgb,iBAEAD,EAAG7Q,cAAgBlK,KAAKib,eAC3Bjb,KAAKib,cAAcpZ,WAAU,SAACyX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASra,aAGtCd,KAAKob,OAAO,SAAWpb,KAAKqb,mBAZ/Brb,KAAKqb,mBAeThI,WA3KyC,SA2K9BrS,GACT,IACM0S,EADS1T,KAAKR,QAAQkT,OACD1R,EAAE2S,KACvBoH,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,YAEZjR,GAAMA,EAAG9F,qBAEakT,IAAtBrV,KAAK0T,IAA+BqH,EAAGvb,QAAQgW,iBAC7CuF,EAAG7Q,cAAgBlK,KAAKyK,SAC1BzK,KAAK0T,GAAaxT,KAAKF,OAK7Bsb,YA1LyC,SA0L7BC,EAAKC,GAAM,WACrB,MAAuB,yBAAnBA,EAAK3F,WAAwC7V,KAAKiU,QAAQuH,IAG9Dxb,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASwF,EAAK,CAIhB,IAAK,IAAM5X,KAHX,EAAKrB,iBACL,EAAK0Q,YAAYgD,GAAOwF,EACxB,EAAKnZ,cACcjD,EAAEsL,iBAAiB+H,KAAKiH,MACrCta,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,KAAU4X,UACnC,EAAK9B,OAAO9V,GACnB,EAAK8X,YAAY9X,IACRvE,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,KAAU6X,IACjD,EAAK/B,OAAO9V,GAAQ6X,GAGxB,OAAO,MAfFxb,MAqBX4V,QAjNyC,SAiNjCF,GACN,GAAwB,yBAApBA,EAAMG,YAAyC7V,KAAKiU,QAAQyB,GAAQ,CAItE,IAAK,IAAM/R,KAHX3D,KAAKsC,iBACLtC,KAAKgT,YAAYpN,KAAK8P,GACtB1V,KAAKqC,cACcjD,EAAEsL,iBAAiB+H,KAAKiH,MACrCta,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,KAAU+R,IAC1C1V,KAAKyZ,OAAO9V,GAAQ+R,GAGnB1V,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBAE1C,OAAOtC,MAGTiU,QAhOyC,SAgOjCyB,GACN,OAAO1V,KAAKgT,YAAYrQ,MAAK,SAAAgT,GAAM,OAAIA,IAAWD,MAGpDI,WApOyC,SAoO9BJ,GAAO,WAgBhB,OAfA1V,KAAKgT,YAAYrQ,MAAK,SAACoT,EAAMC,GAC3B,GAAID,IAASL,EAAO,CAIlB,IAAK,IAAM/R,KAHX,EAAKrB,iBACL,EAAK0Q,YAAYiD,OAAOD,EAAK,GAC7B,EAAK3T,cACcjD,EAAEsL,iBAAiB+H,KAAKiH,MACrCta,EAAEsL,iBAAiB+H,KAAKiH,MAAM/V,KAAU+R,WACnC,EAAK+D,OAAO9V,GACnB,EAAK8X,YAAY9X,IAGrB,OAAO,MAGN3D,KAAKyY,SAASvO,cAAgBlK,KAAKsC,iBACjCtC,MAITyb,YAxPyC,SAwP7B9X,GACN3D,KAAKob,OAAOzX,KACVuE,OAAOC,KAAKnI,KAAK0b,YAAY7W,QAAU,EACzC7E,KAAKoZ,YAEQ,SAATzV,GAAmB3D,KAAKqb,kBAC5Brb,KAAK4D,MAAQ,GACb5D,KAAKgb,mBAKX1Y,eApQyC,WAqQvC,IACMhC,EADKN,KAAKyY,SACDlY,KAEXP,KAAKyK,UACPnK,EAAI2U,YAAYjV,KAAKyK,SACrBzK,KAAKyK,SAAU,IAInB4Q,gBA9QyC,WA8QvB,WACV7Y,EAAUxC,KAAKyY,SACfnY,EAAMkC,EAAQjC,KAEpBP,KAAKmb,SAAW,IAAI/b,EAAEuc,UAAUnZ,EAAQjB,cACxCvB,KAAKmb,SAAS1a,SAGdT,KAAKmb,SAASza,GAAG,aAAa,WAC5B8B,EAAQqG,KAAK,aACb,EAAKvG,oBAOPtC,KAAKmb,SAASS,gBAAkB,WAC9B,IAEIC,EAEA7Y,EAJEK,EAAUb,EAAQW,UAAU,GAC5BG,EAAQtD,KAAK8b,QAAQvY,SAASjD,EAAI8C,mBAAmBC,IAErDkC,EAAU,GAKhB,IAFAvF,KAAK6I,KAAK,WAEL7F,EAAI,EAAGA,EAAI,EAAGA,IACjB6Y,EAAevb,EAAI8C,mBAAmBZ,EAAQW,UAAUH,IACxDuC,EAAQvC,GAAK1C,EAAIqL,mBAAmBkQ,EAAajS,IAAItG,IAGvDd,EAAQ+I,WAAWhG,GACnB/C,EAAQqG,KAAK,QAEb7I,KAAK6I,KAAK,SAGZ7I,KAAKmb,SAASza,GAAG,WAAW,WAC1B8B,EAAQqG,KAAK,eAIjB0Q,iBAxTyC,WAyTnCvZ,KAAKmb,WACPnb,KAAKmb,SAASra,iBACPd,KAAKmb,WAIhBY,UA/TyC,WAgUvC/b,KAAKgc,QAAQ,SAGfC,WAnUyC,WAoUvCjc,KAAKgc,QAAQ,UAGfE,aAvUyC,WAwUvClc,KAAKgc,QAAQ,YAGfG,YA3UyC,WA4UvCnc,KAAKgc,QAAQ,WAGfI,gBA/UyC,WAgVvCpc,KAAKgc,QAAQ,eAGfK,gBAnVyC,WAoVnCrc,KAAKob,OAAO,QAAWpb,KAAKmU,UACzBnU,KAAKsU,SAGdgI,eAxVyC,WAyVvC,IACIhE,EADElK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEmd,iBAEpBvc,KAAK2Y,cAAgB3Y,KAAK2Y,aAC1BL,EAAUtY,KAAK2Y,aAAe3Y,KAAKR,QAAQ8Y,QAAU,EAErDlZ,EAAE6C,QAAQiZ,WAAW9M,EAAOkK,GAC5BlK,EAAM8C,aAAa,UAAWoH,GAE9BtY,KAAKwc,aAGPC,cAvWyC,SAuW3BC,GACZ,IAAMtO,EAAQpO,KAAKyY,SAASlX,aAC5BvB,KAAK6Y,SAAW6D,EACX1c,KAAKiU,QAAQ7U,EAAEud,mBAEnB3c,KAAK6Y,SAAW,EAAK7Y,KAAK2Y,cAAe,EAAO3Y,KAAK2Y,cAAe,EAErEvZ,EAAE6C,QAAQiZ,WAAW9M,EAAOpO,KAAK6Y,UACjCzK,EAAM8C,aAAa,UAAWlR,KAAK6Y,UAEnC7Y,KAAKwc,aAGPI,cApXyC,WAqXvC,IACIrE,EADEnK,EAAQpO,KAAKyY,SAASlX,aAGvBvB,KAAKiU,QAAQ7U,EAAEyd,gBAEpB7c,KAAK4Y,WAAa5Y,KAAK4Y,UACvBL,EAAUvY,KAAK4Y,UAAY5Y,KAAKR,QAAQ+Y,QAAU,OAElDnK,EAAMjC,MAAMoM,QAAUA,EAEtBvY,KAAKwc,aAIPM,aAnYyC,WAoYnC9c,KAAK0Y,cAAiB1Y,KAAK+c,WACxB/c,KAAKgd,cAGdC,eAxYyC,WAyYvC,IAAMlC,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,aAEZlZ,KAAKob,OAAO,SAAYpb,KAAKiU,QAAQ7U,EAAEyV,eAE5BzV,EAAE6C,QAAQib,kBAGzBld,KAAKsC,iBAED2F,EAAMA,EAAGgN,YAAY8F,GAClBA,EAAGxa,KAAK0U,YAAY8F,KAI7BoC,WAxZyC,WAyZvC,IAAM3a,EAAUxC,KAAKyY,SACfnY,EAAMkC,EAAQjC,KACdoE,EAAMnC,EAAQjB,aAEpB,GAAKvB,KAAKiU,QAAQ7U,EAAE8W,cAApB,CAGA,IAAMkH,EAAe,IAAIC,MAEzBD,EAAavX,GAAKuX,EAAavX,IAAM,cACrCmM,SAASqG,KAAK5Q,YAAY2V,GAE1BA,EAAaE,OAAS,WACpB,IAAMtX,EAASoX,EAAapX,OACtBD,EAAQqX,EAAarX,MACrBwX,EAAKjd,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cqa,EAAKld,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Csa,EAAKnd,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAC9Cua,EAAKpd,EAAI8C,mBAAmBZ,EAAQW,UAAU,IAsBpDia,EAAaE,OAAS,WACpBle,EAAE6C,QAAQ8O,OAAOqM,IAGf/D,QAAUA,OAAOsE,eAAe,cAClCC,UACIR,EAAavX,GACb,CAAC,EAAG,EAAGE,EAAO,EAAGA,EAAOC,EAAQ,EAAGA,GACnC,CAACuX,EAAGtZ,EAAGsZ,EAAGrZ,EAAGsZ,EAAGvZ,EAAGuZ,EAAGtZ,EAAGwZ,EAAGzZ,EAAGyZ,EAAGxZ,EAAGuZ,EAAGxZ,EAAGwZ,EAAGvZ,IAC9C,IAKRkZ,EAAalY,IAAM1C,EAAQhD,QAAQqe,mBAAqBlZ,EAAIO,MAG9D6X,SAldyC,WAmd7B/c,KAAK0Y,eAEJ1Y,KAAKiU,QAAQ7U,EAAE0e,eAE1B9d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASK,eACd9Y,KAAKwc,aAGPQ,WA5dyC,YA6d7Bhd,KAAK0Y,eAEL1Y,KAAKiU,QAAQ7U,EAAE0e,eAEzB9d,KAAK0Y,eAAgB,EACrB1Y,KAAKyY,SAASsF,cACd/d,KAAKwc,aAGPrI,QAteyC,WAuevC,IAAM4G,EAAK/a,KAAKyY,SACVnY,EAAMya,EAAGxa,KACT0H,EAAKjI,KAAKkZ,YAEXlZ,KAAKob,OAAO,YACZnT,GAAOA,EAAG1F,YAAYwY,KAAS9S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKib,eAAiB3a,EAAI2U,YAAYjV,KAAKib,eACvB,SAApBF,EAAGvb,QAAQmE,MAAoB3D,KAAKge,QAAQjD,EAAGvb,QAAQmE,MAIzD3D,KAAK4D,MAAQmX,EAAGvb,QAAQmE,MAHxB3D,KAAK4D,MAAQ,GACb5D,KAAKib,cAAgB,IAIvBjb,KAAKgb,gBACLhb,KAAKqb,kBACLrb,KAAKwc,aAGPlI,MA5fyC,WA6fvC,IAAMyG,EAAK/a,KAAKyY,SACVnY,EAAMya,EAAGxa,KACT0H,EAAKjI,KAAKkZ,YAEZlZ,KAAKob,OAAO,YACXnT,GAAOA,EAAG1F,YAAYwY,KAAS9S,GAC7BjI,KAAKiU,QAAQ7U,EAAEiV,eAGlBrU,KAAKib,eAAiB3a,EAAI2U,YAAYjV,KAAKib,eAC/Cjb,KAAK4D,MAAQ,OACb5D,KAAKgb,gBACLhb,KAAKuZ,mBACLvZ,KAAKwc,aAGPyB,UA7gByC,WA8gBvCje,KAAKyY,SAASrW,YAGhBiI,aAjhByC,SAihB5BrJ,GACX,IAAMiH,EAAKjI,KAAKkZ,YAEXlZ,KAAKib,iBAELjb,KAAKob,OAAO,SAAYnT,GAAMA,EAAG9F,gBAEtCnC,KAAKib,cAAcpZ,WAAU,SAACyX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAAS1a,SACvCrB,EAAE6C,QAAQ4N,SAASyJ,EAAO/X,aAAc,4BAI5C4I,aA/hByC,WAgiBvC,IAAM4Q,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,YAGXlZ,KAAKwZ,UAAYxZ,KAAKgZ,eAEtBhZ,KAAKib,gBACNjb,KAAKob,OAAO,SAAYnT,GAAMA,EAAG1F,YAAYwY,IAEjD/a,KAAKib,cAAcpZ,WAAU,SAACyX,GAC5BA,EAAO4B,WAAW,GACd5B,EAAO6B,UAAY7B,EAAO6B,SAASra,UACvC1B,EAAE6C,QAAQ8R,YAAYuF,EAAO/X,aAAc,4BAI/CyZ,cAhjByC,WAijBvC,IACM1a,EADKN,KAAKyY,SACDlY,KACToD,EAAO3D,KAAKke,UAEdle,KAAKib,eAAiB3a,EAAI2U,YAAYjV,KAAKib,eAC/Cjb,KAAKib,cAAyB,KAATtX,EAAc,GAAK3D,KAAKwZ,SAAS7V,GAC3B,KAAvB3D,KAAKib,eACP3a,EAAIwZ,SAAS9Z,KAAKib,gBAItB5Y,YA5jByC,WA6jBvC,IAAM0Y,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,YACV5Y,EAAMya,EAAGxa,KAETgF,EAAUwV,EAAGzV,aACf6Y,GAAS,IAEb,GAAIlW,GAAMA,EAAG9F,eACX8F,EAAGzH,QAAQ6B,mBAIb,IAAI0Y,EAAGvb,QAAQgW,kBAAmBxV,KAAKyK,QAAvC,CAEA,IAAK,IAAIzH,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAM2Y,IACnBA,EAAS5Y,EAAQvC,GAAGwC,KAKxB,IAAM4Y,EAAcrD,EAAGxR,YACvB6U,EAAY5Y,IAAM2Y,EAElBne,KAAKyK,QAAUrL,EAAE0Q,iBAAiBuO,SAASD,EAAa,CACtDnL,QAASjT,KAAKgT,cACbpB,MAAMtR,EAAKya,GACdA,EAAGlS,KAAK,qBAGV2T,SA3lByC,WA4lBnCxc,KAAKyK,SAAWzK,KAAKsC,iBACzBtC,KAAKqC,eAGPuI,kBAhmByC,WAimBvC,IAAMpI,EAAUxC,KAAKyY,SAEflT,EAAU/C,EAAQ8C,aAClBmF,EAAUzK,KAAKyK,QACjB0T,GAAS,IAEb,GAAI1T,GAAWA,aAAmBrL,EAAEsL,iBAAiBC,SAAU,CAC7D,IAAK,IAAI3H,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAM2Y,IACnBA,EAAS5Y,EAAQvC,GAAGwC,KAKxB,IAAM4Y,EAAc5b,EAAQ+G,YAC5B6U,EAAY5Y,IAAM2Y,EAEb3b,EAAQhD,QAAQgW,iBACnBxV,KAAKyK,QAAQ6T,UAAUF,KAK7BJ,QAxnByC,SAwnBjCra,GACN,QAAS3D,KAAKyZ,OAAO9V,IAGvBua,QA5nByC,WA6nBvC,GAAKle,KAAKgC,UACV,OAAOhC,KAAK4D,OAGd8X,SAjoByC,WAkoBvC,OAAO1b,KAAKyZ,QAGd2B,OAroByC,SAqoBlCzX,GACL,QAAK3D,KAAKgC,WACHhC,KAAK4D,QAAUD,GAGxBqY,QA1oByC,SA0oBjCuC,GACN,IAAMxD,EAAK/a,KAAKyY,SACVxQ,EAAKjI,KAAKkZ,YAGhB,GAFalZ,KAAKke,YAELK,GAAYve,KAAKge,QAAQO,IAAave,KAAKgC,UAaxD,OATIhC,KAAKyK,SAAWzK,KAAKyK,QAAQ+T,UAAUD,GACvCve,KAAKob,OAAO,UAAYpb,KAAKmb,UAAYnb,KAAKqb,kBAClDrb,KAAK4D,MAAQ2a,EACTve,KAAKob,OAAO,SAAWpb,KAAKuZ,mBAChCvZ,KAAKgb,gBACLhb,KAAKwc,WAEDvU,GAAMA,EAAG1F,YAAYwY,IAAOA,EAAG3Y,WAE5BpC,MAOToZ,SAnqByC,SAmqBhCpY,GACP,IAAM2C,EAAO3D,KAAKke,UACZjW,EAAKjI,KAAKkZ,YACVuF,EAAavW,OAAOC,KAAKnI,KAAK0b,YAC9B1F,EAAMyI,EAAW9E,QAAQhW,GAEzB4a,EAAUE,GADCzI,EAAM,GAAKyI,EAAW5Z,QAGvC,GAAI7D,EAAG,CACL,GAAIiH,GAAMA,EAAG9F,eAAkB,OAC/B/C,EAAE8B,SAASwd,KAAK1d,GAGlB,OAAOhB,KAAKgc,QAAQuC,MAIxBnf,EAAE0Q,iBAAiBhO,KAAO,SAACU,EAAShD,GAClC,OAAO,IAAIJ,EAAEsL,iBAAiB+H,KAAKjQ,EAAShD,K,eCxrB9CJ,EAAEyd,aAAezd,EAAEuf,WAAWpf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIof,EACAC,EAHE/c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK8W,WACPgG,EAAM,eACNC,EAAUrc,EAAQhD,QAAQiP,YAAYqQ,eAEtCF,EAAM,eACNC,EAAUrc,EAAQhD,QAAQiP,YAAYsQ,YAGxCvf,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACThN,UAAoB,SAATlO,EAAkB,WAAa,IAI5CvE,EAAEsL,iBAAiB8N,WAAW2G,EAAa,SAATxb,EAAkB,GAAK,gBAEzDvE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BmC,WA8BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,eAAgB,gBACnDjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,gBAAiB,cACpDvd,EAAK8a,oB,eClCTxd,EAAEyV,aAAezV,EAAEuf,WAAWpf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIqf,EAFE/c,EAAOU,EAAQhC,QAOjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCoM,EAAUrc,EAAQhD,QAAQiP,YAAY6Q,YAEtClgB,EAAEsL,iBAAiB8N,WAAW+G,UACb,SAAfzd,EAAK8B,MAAmB,GAAK,mBAG/Bib,EAAUrc,EAAQhD,QAAQiP,YAAY+Q,aACtCpgB,EAAEsL,iBAAiBiI,iBAAiB4M,UACnB,SAAfzd,EAAK8B,MAAmB,GAAK,iBAIjCpE,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAtBU,iBAuBVL,QAASA,EACThN,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAjCmC,WAkCjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAKmb,iBAC7Cnb,EAAK8S,mB,eCrChBxV,EAAEqgB,cAAgBrgB,EAAEuf,WAAWpf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASrc,EAAQhD,QAAQiP,YAAYiR,aACrC7N,UAAW,WAGbzS,EAAEsL,iBAAiB8N,WAAWmH,EAAI,eAClCvgB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdoC,WAerBlQ,KAAKyY,SAASjY,QACtB0b,mB,eChBT9c,EAAEwgB,WAAaxgB,EAAEuf,WAAWpf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,OACNL,QAASrc,EAAQhD,QAAQiP,YAAYoR,UACrChO,UAAW,QAGbzS,EAAEsL,iBAAiB8N,WAAWsH,EAAI,YAClC1gB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdiC,WAelBlQ,KAAKyY,SAASjY,QACtBub,gB,eChBT3c,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEuf,WAAavf,EAAE2gB,SAASC,OAAOzgB,OAAO,CACtCC,QAAS,CACPwf,YAAa,CACXC,KAAK,EACLC,KAAM,GACNrN,UAAW,GACXgN,QAAS,KAIb/e,WAVsC,SAU3BQ,EAAKkC,EAAShD,GACvBQ,KAAKyY,SAAWjW,EAChBxC,KAAKO,KAAOD,EAEZlB,EAAEW,WAAWC,KAAMR,GACnBJ,EAAE2gB,SAASC,OAAO/f,UAAUH,WAAWI,KAAKF,KAAMR,GAElDQ,KAAK+R,kBAGPkO,YApBsC,SAoB1BxV,EAASuG,EAAWkP,GAAM,WAC9BC,EAAcngB,KAAKR,QAAQwf,YAC3BnN,EAAYsO,EAAYtO,UACxB/P,EAAO9B,KAAKyY,SAASjY,QACrB2L,EAAQnM,KAAKR,QAAQwf,YAAY7S,MAEvCnM,KAAKyK,QAAUA,EACfzK,KAAKogB,MAAQhhB,EAAE6C,QAAQgP,OAAO,KAAM,GAAID,GACxChR,KAAKqf,MAAQjgB,EAAE6C,QAAQgP,OAAO,IAAK,GAAIjR,KAAKogB,OAExCD,EAAYlB,IACdjf,KAAKqf,MAAMhO,UAAYjS,EAAEkS,SAASL,OAAOkP,EAAYjB,MAErDlf,KAAKqf,MAAMhO,UAAY8O,EAAYjB,KAGrClf,KAAKqf,MAAMnO,aAAa,OAAQ,KAChClR,KAAKqf,MAAMnO,aAAa,QAASiP,EAAYtB,SACzC1S,GAASnM,KAAKqf,MAAMnO,aAAa,QAAS/E,GAC9CnM,KAAKqf,MAAMnO,aAAa,OAAQ,UAEhC9R,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAOrf,KAAKqgB,YAAYxK,WAE5ChE,IACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAOxN,GACb,aAAdA,GACFzS,EAAE6C,QAAQ4N,SAAS7P,KAAKogB,MAAOvO,GAE7BA,IAAc/P,EAAK8B,MACrBxE,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAO,iBAE/BjgB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAO,kBAItCjgB,EAAE8B,SAASR,GAAGV,KAAKqf,MAAO,QAASrf,KAAKS,OAAQT,MAChDZ,EAAE8B,SAASR,GAAGV,KAAKyY,SAAU,UAAU,WACrC,IAAM7B,EAAQ,EAAKyI,MAAMhO,UAAUuF,MAAM,yBACrCA,GAA0B,IAAjBA,EAAM/R,QAAgB,EAAKyb,mBAI1CtgB,KAAKugB,eAAe9V,EAASzK,KAAKogB,MAAOF,IAG3CnO,eAjEsC,WAkEpC,IAAIC,SAASC,cAAc,YAA3B,CAIA,IAAMC,EAAKF,SAASwO,cAAc,OAClCtO,EAAGrM,GAAK,UACRqM,EAAGhB,aAAa,SAAU,UAC1BgB,EAAGb,WAAY,IAAIjS,EAAEqhB,gBAAiBpO,SAEtCL,SAASC,cAAc,wBAAwBxK,YAAYyK,KAG7DoO,cA9EsC,WA+EpClhB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAMqB,cAAe,YAChDthB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAO,aAGpCsB,eAnFsC,WAoFpCvhB,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAMqB,cAAe,YAC7CthB,EAAE6C,QAAQ4N,SAAS7P,KAAKqf,MAAO,eAInCjgB,EAAEwhB,WAAa,SAAStgB,EAAKkC,EAAShD,GACpC,OAAO,IAAIJ,EAAEuf,WAAWre,EAAKkC,EAAShD,K,eC/FxCJ,EAAE8W,aAAe9W,EAAEuf,WAAWpf,OAAO,CAEnCO,WAFmC,SAExBQ,EAAKkC,EAAShD,GACvB,IACIqf,EADE/c,EAAOU,EAAQhC,QAGrBR,KAAK6gB,aAAc,EACnB7gB,KAAK8gB,gBAAiB,EACtB9gB,KAAK+gB,iBAAkB,EAEnBjf,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAWxX,EAAI,aAClC6d,EAAUrc,EAAQhD,QAAQiP,YAAYuS,cAEtC5hB,EAAEsL,iBAAiBiI,iBAAiB3R,EAAI,cACxC6d,EAAUrc,EAAQhD,QAAQiP,YAAYwS,eAGxCzhB,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASA,GAGXzf,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BmC,WA6BjC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3B,GAAIsB,aAAgB1C,EAAEsL,iBAAiB+H,KACrC3Q,EAAKqb,kBAKP,IAAInd,KAAK+gB,gBAAT,CAGE/gB,KAAK+gB,iBAAkB,EAGzB,IAAMG,EAAalhB,KAAKqf,MAAMqB,cAE9B1gB,KAAKmhB,kBAAoBnhB,KAAKohB,iBAAiBxe,KAAK5C,MACpDA,KAAKqhB,kBAAoBrhB,KAAKshB,iBAAiB1e,KAAK5C,MAEpDZ,EAAE8B,SAASR,GAAGwgB,EAAY,SAAS,WACjC,GAAKlhB,KAAK6gB,YAWH,CAEL,GAAI7gB,KAAK8gB,eACP,OAGF9gB,KAAKuhB,aACLvhB,KAAKwhB,0BAA0BN,GAC/Bpf,EAAKoT,oBAlBLlV,KAAK6gB,aAAc,EACnB7gB,KAAKyhB,mBAELC,WAAW1hB,KAAK2hB,0BAA0B/e,KAAK5C,KAAMkhB,GAAa,KAClEpf,EAAKoR,cAAcwE,KACf,WACE1X,KAAKuhB,aACLvhB,KAAKwhB,0BAA0BN,IAC/Bte,KAAK5C,SAYZA,QAGLuhB,WAzEmC,WA0EjCvhB,KAAK4hB,qBACL5hB,KAAK6gB,aAAc,EACnB7gB,KAAK8gB,gBAAiB,GAGxBa,0BA/EmC,SA+ETE,GACxBA,EAAQC,iBAAiB,aAAc9hB,KAAKmhB,mBAC5CU,EAAQC,iBAAiB,aAAc9hB,KAAKqhB,oBAG9CG,0BApFmC,SAoFTK,GACxBA,EAAQE,oBAAoB,aAAc/hB,KAAKmhB,mBAC/CU,EAAQE,oBAAoB,aAAc/hB,KAAKqhB,oBAGjDD,iBAzFmC,WA0FjCphB,KAAKgiB,oBAGPV,iBA7FmC,WA8F7BthB,KAAK8gB,eACP9gB,KAAK8gB,gBAAiB,EAEtB9gB,KAAKyhB,oBAITG,mBArGmC,WAsGjCxiB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,UAAW,WAC9CjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,gBAAiB,cACpDjgB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAM4C,WAAY,WAG/CR,iBA3GmC,WA4GjCriB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,WACnCjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,gBAAiB,cACpDjgB,EAAEkS,SAAS4Q,cAAcliB,KAAKqf,MAAO,WAGvC2C,iBAjHmC,WAkHjC5iB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,UACnCjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,gBAAiB,cACpDjgB,EAAE6C,QAAQ8R,YAAY/T,KAAKqf,MAAM4C,WAAY,c,cCpHjD7iB,EAAE+iB,iBAAmB/iB,EAAEuf,WAAWpf,OAAO,CACvCO,WADuC,SAC5BQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,cACNL,QAASrc,EAAQhD,QAAQiP,YAAY2T,gBACrCvQ,UAAW,cAGbzS,EAAEsL,iBAAiB8N,WAAW6J,EAAI,kBAClCjjB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAduC,WAexBlQ,KAAKyY,SAASjY,QACtB4b,sB,eChBThd,EAAEkjB,gBAAkBljB,EAAEuf,WAAWpf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IAAMsC,EAAOU,EAAQhC,SAErBhB,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASrc,EAAQhD,QAAQiP,YAAY8T,eACrC1Q,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAfsC,WAgBpC,IAAM9B,EAAQpO,KAAKyY,SAASlX,aAE5BihB,KAAKC,QAAQrU,EAAOhP,EAAEojB,KAAKpU,Q,eClB/BhP,EAAEiV,WAAajV,EAAEuf,WAAWpf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,GACvB,IACIof,EACAC,EAFE/c,EAAOU,EAAQhC,QAIjBsB,aAAgB1C,EAAEsL,iBAAiB+H,MACrCrT,EAAEsL,iBAAiB8N,WAAWkK,EAAI,UAClCtjB,EAAEsL,iBAAiB8N,WAAWmK,EAAI,QAClC9D,EAAUrc,EAAQhD,QAAQiP,YAAYmU,SAEtChE,EAAM9c,EAAKsZ,OAAO,QAAU,OAAS,WAErChc,EAAEsL,iBAAiBiI,iBAAiBgQ,EAAI,aACxC9D,EAAUrc,EAAQhD,QAAQiP,YAAYoU,WACtCjE,EAAM,SAGRpf,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACThN,UAAW,QAGbzS,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA7BiC,WA8B/B,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAEvBsB,aAAgB1C,EAAEsL,iBAAiB+H,KAAQ3Q,EAAKua,kBAC7Cva,EAAKsS,iB,eCjChB,IAAI0O,EAAY,CAAC,IAAK,GAAI,GAAI,GAAI,GAAI,GAGhCC,EAAgB,IAAIC,cAC1BD,EAAcE,YAAd,uoBAsBAF,EAAcG,WAAd,oGAKAlR,SAASmR,mBAAqB,CAACJ,GAE/BD,EAAYA,EAAUxiB,KAAI,SAACoc,GAIzB,OAHC0G,MAAM1G,IAAMA,EAAI,OAAOA,EAAI,KAC3BA,EAAI,IAAKA,EAAI,GAEPtd,EAAEuf,WAAWpf,OAAO,CACzBC,QAAS,CACPwf,YAAa,CACXE,KAAMxC,EACNmC,QAAS,WAAanC,EAAG,IACzB7K,UAAW,gCACX1F,MAAO,yBAA2B,IAAMuQ,GAAK,MAAQ,IAAMA,GAAK,MAAQ,IAAMA,GAAK,QAGvFxM,SATyB,WAUvBlQ,KAAKyY,SAASjY,QAAQic,cAAcC,EAAE,WAK5Ctd,EAAEikB,kBAAoBjkB,EAAE2gB,SAASxgB,OAAO,CACtCC,QAAS,CACPqS,UAAW,GACXnO,OAAQ,WAAa,OAAO,GAC5BuP,QAAS,GACT9G,MAAO,oBAAF,OAAiD,IAAxB2W,EAAUje,OAAS,GAA5C,QAGPye,kBARsC,SAQpBtS,GAChB,IAGIhO,EAAOiM,EAAO0T,EAAOY,EAFrB1R,EADY7R,KAAKqgB,YAAYxK,UAAY,IAAM7V,KAAKwjB,kBAC5B,IAAMxjB,KAAKR,QAAQqS,UAmB/C,IAfA7R,KAAKoQ,WAAaY,EAClBhR,KAAKyjB,IAAMrkB,EAAE6C,QAAQgP,OAAO,KAAMY,EAAWb,GAC7ChR,KAAKyjB,IAAItX,MAAM9H,UAAcrE,KAAKR,QAAQ2M,MAAUnM,KAAKR,QAAQ2M,MAAQ,GAQzEnM,KAAK0jB,gBAAkB,CACrB,QAAS,YAAa,WACtB,YAAa,UAAW,cAGrBzU,EAAI,EAAGsU,EAAIvjB,KAAK0jB,gBAAgB7e,OAAQoK,EAAIsU,EAAGtU,IAClD7P,EAAE8B,SAASR,GAAGV,KAAKyjB,IAAKzjB,KAAK0jB,gBAAgBzU,GAAI7P,EAAE8B,SAAS6B,iBAI9D,IAAKC,EAAI,EAAG2f,EAAI3iB,KAAKR,QAAQyT,QAAQpO,OAAQ7B,EAAI2f,EAAG3f,KAGzC,IAFAhD,KAAK2jB,sBAAsB3jB,KAAKR,QAAQyT,QAAQjQ,MAGlDid,YAAYjgB,KAAMA,KAAKyjB,IAAKzjB,KAAK4jB,eAM9CxkB,EAAEud,gBAAkBvd,EAAEuf,WAAWpf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IACMmE,EADOnB,EAAQhC,QACHoD,OAElBpE,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,YACNL,QAAS,qBACThN,UAAoB,SAATlO,EAAkB,WAAa,IAG5CnE,EAAQqkB,WAAa,IAAIzkB,EAAEikB,kBAAkB,CAC3CpQ,QAAS6P,IAGX1jB,EAAEsL,iBAAiB8N,WAAWkE,EAAa,SAAT/Y,EAAkB,GAAK,gBAEzDvE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAtBsC,WAsB3B,WACH4T,EAAO9jB,KAAKqf,MACdjgB,EAAE6C,QAAQQ,SAASqhB,EAAM,uBAC3B1kB,EAAE6C,QAAQ8R,YAAY+P,EAAM,sBAC5BpC,YAAW,WACT,EAAKliB,QAAQqkB,WAAWE,UACvB,MAEH3kB,EAAE6C,QAAQ4N,SAASiU,EAAM,sBAG3B1kB,EAAEkS,SAAS8N,YAAY0E,EAAM,YAAa,UAC1C1kB,EAAEkS,SAASQ,YAAYgS,EAAM,yBAA0B,c,eClI3D1kB,EAAEmd,cAAgBnd,EAAEuf,WAAWpf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAEIof,EACAC,EAHE/c,EAAOU,EAAQhC,QACfmD,EAAO7B,EAAK8B,MAId9B,EAAK6W,cACPiG,EAAM,gBACNC,EAAUrc,EAAQhD,QAAQiP,YAAYuV,kBAEtCpF,EAAM,UACNC,EAAUrc,EAAQhD,QAAQiP,YAAYwV,uBAGxCzkB,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACThN,UAAoB,SAATlO,EAAkB,WAAa,IAG5CvE,EAAEsL,iBAAiB8N,WAAWkE,EAAa,SAAT/Y,EAAkB,GAAK,iBAEzDvE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BoC,WA6BlC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QACrBsjB,EAAO9jB,KAAKqf,MAElBjgB,EAAEkS,SAAS8N,YAAY0E,EAAM,UAAW,iBACxC1kB,EAAEkS,SAASQ,YAAYgS,EAAM,yBAA0B,qBACvDhiB,EAAKwa,qB,eClCTld,EAAE8kB,cAAgB9kB,EAAEuf,WAAWpf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAAMmE,EAAOvE,EAAEe,MAAMgT,aAAa3Q,EAAS,UAAW,SAChDqI,EAASrI,EAAQqI,QAEvBrL,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASrc,EAAQhD,QAAQiP,YAAY0V,aACrCtS,UAAWhH,GAAmB,SAATlH,EAAkB,GAAK,YAG9CvE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAhBoC,WAiBlC,IAAM6K,EAAK/a,KAAKyY,SAEhBrZ,EAAE8B,SAASR,GAAGqa,EAAI,CAChBjZ,KAAM9B,KAAKsgB,cACXxS,QAAS9N,KAAK2gB,gBACb3gB,MAEH+a,EAAGjN,c,eCxBP1O,EAAEglB,aAAehlB,EAAEuf,WAAWpf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASrc,EAAQhD,QAAQiP,YAAY4V,YACrCxS,UAAW,UAGbzS,EAAEsL,iBAAiB8N,WAAW8L,EAAI,cAClCllB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdmC,WAepBlQ,KAAKyY,SAASjY,QACtB2b,kB,eChBT/c,EAAEmlB,YAAcnlB,EAAEuf,WAAWpf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,QACNL,QAASrc,EAAQhD,QAAQiP,YAAY+V,WACrC3S,UAAW,SAGbzS,EAAEsL,iBAAiB8N,WAAWiM,EAAI,aAClCrlB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAdkC,WAenBlQ,KAAKyY,SAASjY,QACtByb,iB,eChBT7c,EAAE0e,YAAc1e,EAAEuf,WAAWpf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,GACvB,IACIof,EACAC,EAFE/c,EAAOU,EAAQhC,QAIjBsB,EAAK4W,eACPkG,EAAM,eACNC,EAAUrc,EAAQhD,QAAQiP,YAAYiW,eAEtC9F,EAAM,gBACNC,EAAUrc,EAAQhD,QAAQiP,YAAYkW,cAGxCnlB,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACThN,UAA0B,SAAf/P,EAAK8B,MAAmB,WAAa,IAGlDxE,EAAEsL,iBAAiB8N,WAAWlL,EAAmB,SAAfxL,EAAK8B,MAAmB,GAAK,WAC/DxE,EAAEsL,iBAAiB8N,WAAWoM,EAAmB,SAAf9iB,EAAK8B,MAAmB,GAAK,aAE/DxE,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SA5BkC,WA6BhC,IAAMpO,EAAO9B,KAAKyY,SAASjY,QAE3BpB,EAAEkS,SAAS8N,YAAYpf,KAAKqf,MAAO,gBAAiB,gBACpDjgB,EAAEkS,SAASQ,YAAY9R,KAAKqf,MAAO,iBAAkB,iBACrDvd,EAAKgb,mB,eCjCT1d,EAAE8U,aAAe9U,EAAEuf,WAAWpf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACbwf,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASrc,EAAQhD,QAAQiP,YAAYoW,cAGvCzlB,EAAEsL,iBAAiBiI,iBAAiB+P,EAAI,eACxCtjB,EAAEuf,WAAW1e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D0Q,SAbmC,WAcpBlQ,KAAKyY,SAASjY,QACtBwT,mB,eCdT5U,EAAEojB,KAAO,SAAqB7d,GAC5B,GAAiD,IAA7CuD,OAAOC,KAAKqa,KAAKsC,WAAWngB,IAAME,OAAc,CAClDmS,QAAQC,IAAIuL,KAAKsC,WAAWngB,IAC5B,IAAMogB,EAAMvC,KAAKsC,WAAWngB,QAKC,IAApBogB,EAAIC,kBACiB,IAArBD,EAAIE,eAKTF,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAEhBD,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GAEfF,EAAIG,eAGJH,EAAII,iBAUqB,MAA3BJ,EAAIK,oBAK8B,MAA3BL,EAAIK,oBAHV/Z,KAAKyB,GACLiY,EAAIM,gBAAgBC,UAAYP,EAAIM,gBAAgBE,aAOvDvO,QAAQC,IAAI,yBAGdD,QAAQC,IAAI,eAAgB8N,EAAIS,cAGR,IAApBT,EAAIS,aAGuB,IAApBT,EAAIS,aAGgB,IAApBT,EAAIS,cAJHna,KAAKyB,QAWY,IAApBiY,EAAIU,kBACmB,IAAvBV,EAAIW,qBAKkB,IAApBX,EAAIU,kBACmB,IAAvBV,EAAIW,iBAGTX,EAAIU,YAAYH,UAAYP,EAAIU,YAAYF,YAC5CR,EAAIW,qBAMV3O,MAAM,4D,cClFV3X,EAAEumB,cAAgBvmB,EAAEwmB,WAAWrmB,OAAO,CACpCC,QAAS,CACPqmB,KAAM,UACNC,KAAM1mB,EAAE0mB,KAAK,CACXC,QAEE,iVACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZoC,WAalBlmB,KAAKmmB,SAEb7b,UAAUtK,KAAKomB,QAASpmB,KAAKqmB,cAGvCC,aAlBoC,WAmBlCtmB,KAAKse,UAAUte,KAAKmmB,SAAShjB,UAAUnD,KAAKomB,aAIhDhnB,EAAE+a,cAAgB,SAAS3X,EAASwT,EAAKxW,GACvC,OAAO,IAAIJ,EAAEumB,cAAcnjB,EAASwT,EAAKxW,K,eCxB3CJ,EAAEmnB,WAAannB,EAAEwmB,WAAWrmB,OAAO,CACjCC,QAAS,CACPqmB,KAAM,OACNC,KAAM1mB,EAAE0mB,KAAK,CAEXC,QAAS,ykCACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAXiC,WAY/B,IAAM1jB,EAAUxC,KAAKmmB,SACfK,EAAehkB,EAAQW,UAAUnD,KAAKomB,SACtCK,EAAYzmB,KAAKqmB,YAEvB7jB,EAAQkL,OAAO8Y,EAAcC,IAG/BH,aAnBiC,WAoB/BtmB,KAAKse,UAAUte,KAAKmmB,SAAShjB,UAAUnD,KAAKomB,aAIhDhnB,EAAE2a,WAAa,SAASvX,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAEmnB,WAAW/jB,EAASwT,EAAKxW,K,eCzBxCJ,EAAEwmB,WAAaxmB,EAAEsnB,OAAOnnB,OAAO,CAC7BO,WAD6B,SAClB0C,EAAS+H,EAAQ/K,GAC1B,IAAMgL,EAAShI,EAAQW,UAAUoH,GAEjCnL,EAAEW,WAAWC,KAAMR,GAEnBQ,KAAKmmB,SAAW3jB,EAChBxC,KAAKomB,QAAU7b,EAEf,IAAMoc,EAAgB,CACpBjM,WAAW,EACXkM,aAAc,IAGZpnB,GAAWA,EAAQme,eAAe,eACpCgJ,EAAcjM,UAAYlb,EAAQkb,WAGpCtb,EAAEsnB,OAAOzmB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQmc,IAGnDtmB,MArB6B,SAqBvBC,GACJlB,EAAEsnB,OAAOzmB,UAAUI,MAAMH,KAAKF,KAAMM,GACpCN,KAAK6mB,iBACL7mB,KAAKsmB,gBAGPzlB,SA3B6B,SA2BpBP,GACPN,KAAK8mB,mBACL1nB,EAAEsnB,OAAOzmB,UAAUY,SAASX,KAAKF,KAAMM,IAGzCymB,mBAhC6B,WAiC3B/mB,KAAKmmB,SAAStd,KAAK,cAGrBme,iBApC6B,WAqC3BhnB,KAAKinB,aAGPA,UAxC6B,WAyC3BjnB,KAAKmmB,SAAStb,QAAS,EACvB7K,KAAKmmB,SAAStd,KAAK,SAGrBge,eA7C6B,WA8C3B7mB,KAAKU,GAAG,CACNgB,YAAatC,EAAE8B,SAASwd,KACxBvd,UAAWnB,KAAK+mB,mBAChB1lB,KAAMrB,KAAKkmB,cACXgB,QAASlnB,KAAKgnB,kBACbhnB,MAEHA,KAAKmmB,SAAS5lB,KAAKG,GAAG,UAAWV,KAAKsmB,aAActmB,MACpDA,KAAKmmB,SAASzlB,GAAG,SAAUV,KAAKsmB,aAActmB,OAGhD8mB,iBAzD6B,WA0D3B9mB,KAAKe,IAAI,CACPW,YAAatC,EAAE8B,SAASwd,KACxBvd,UAAWnB,KAAK+mB,mBAChB1lB,KAAMrB,KAAKkmB,cACXgB,QAASlnB,KAAKgnB,kBACbhnB,MAEHA,KAAKmmB,SAAS5lB,KAAKQ,IAAI,UAAWf,KAAKsmB,aAActmB,MACrDA,KAAKmmB,SAASplB,IAAI,SAAUf,KAAKsmB,aAActmB,OAIjDmnB,wBAtE6B,SAsELC,EAASC,GAC/B,IAAM7kB,EAAUxC,KAAKmmB,SACf7lB,EAAMkC,EAAQjC,KAEd+mB,EAAchnB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmBgkB,GACrCxZ,EAAWtN,EAAI8C,mBAAmBikB,GAClCE,EAAsBvnB,KAAKwnB,IAAIF,EAAa3Z,GAC5C8Z,EAAmBznB,KAAKwnB,IAAIF,EAAa1Z,GAE/C,OAAOvC,KAAKqc,KAAKD,EAAmBF,IAItCC,IApF6B,SAoFzB5C,EAAGzF,GACL,IAAMwI,EAAK/C,EAAE3gB,EAAIkb,EAAElb,EACb2jB,EAAKhD,EAAE1gB,EAAIib,EAAEjb,EAEnB,OAAOmH,KAAKC,IAAIqc,EAAI,GAAKtc,KAAKC,IAAIsc,EAAI,IAIxCC,oBA5F6B,SA4FTT,EAASC,GAC3B,IAAM7kB,EAAUxC,KAAKmmB,SACf7lB,EAAMkC,EAAQjC,KAGd+mB,EAAchnB,EAAI8C,mBAAmBZ,EAAQ+G,aAC7CoE,EAAcrN,EAAI8C,mBAAmBgkB,GACrCxZ,EAAWtN,EAAI8C,mBAAmBikB,GAElCS,EACJzc,KAAK0c,MAAMT,EAAYpjB,EAAIyJ,EAAYzJ,EAAGojB,EAAYrjB,EAAI0J,EAAY1J,GAMxE,OAHEoH,KAAK0c,MAAMT,EAAYpjB,EAAI0J,EAAS1J,EAAGojB,EAAYrjB,EAAI2J,EAAS3J,GAGhD6jB,M,eC5GtB1oB,EAAE4oB,iBAAmB5oB,EAAEwmB,WAAWrmB,OAAO,CACvCC,QAAS,CACPqmB,KAAM,aACNC,KAAM1mB,EAAE0mB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZuC,WAarC,IAAM1jB,EAAUxC,KAAKmmB,SACf7lB,EAAMkC,EAAQjC,KACdimB,EAAehkB,EAAQW,UAAUnD,KAAKomB,SACtCK,EAAYzmB,KAAKqmB,YACjB1Z,EAAQ3M,KAAK6nB,oBAAoBrB,EAAcC,GAC/C5a,EAAQ7L,KAAKmnB,wBAAwBX,EAAcC,GAE3C,IAAV9Z,GAAenK,EAAQ6K,SAASV,EAAO,OAE3C,IAAIhG,EAAenE,EAAQmE,aACtBA,IAAgBA,EAAe,IAEpC,IAAMshB,EAAU3nB,EAAI4nB,uBAAuB1lB,EAAQW,UAAU,IACvDglB,EAAU7nB,EAAI4nB,uBAAuB1lB,EAAQW,UAAU,IACvD+L,EAAI7D,KAAK+c,IAAIH,EAAQhkB,EAAIkkB,EAAQlkB,GACjCmL,EAAI/D,KAAK+c,IAAIH,EAAQ/jB,EAAIikB,EAAQjkB,GACtBmH,KAAKqc,KAAKxY,EAAIA,EAAIE,EAAIA,GACxBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAEhBrJ,EAAQoJ,QAAQ,IAIpB0a,aArCuC,WAsCrCtmB,KAAKse,UAAUte,KAAKmmB,SAAShjB,UAAUnD,KAAKomB,aAIhDhnB,EAAEmb,iBAAmB,SAAC/X,EAASwT,EAAKxW,GAClC,OAAO,IAAIJ,EAAE4oB,iBAAiBxlB,EAASwT,EAAKxW,K,eC3C9CJ,EAAEipB,WAAajpB,EAAEwmB,WAAWrmB,OAAO,CACjCC,QAAS,CACPqmB,KAAM,OACNyC,aAAa,EACbxC,KAAM1mB,EAAE0mB,KAAK,CAEXC,QAAS,ycACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBplB,SAZiC,SAYxBP,GACPN,KAAKuoB,gBACLnpB,EAAEwmB,WAAW3lB,UAAUY,SAASX,KAAKF,KAAMM,IAG7CumB,eAjBiC,WAkB/B,IAAMf,EAAO9lB,KAAKuB,aAElBnC,EAAEwmB,WAAW3lB,UAAU4mB,eAAe3mB,KAAKF,MAE3CZ,EAAE8B,SAASR,GAAGolB,EAAM,CAClBtkB,UAAWxB,KAAKwoB,WAChBC,QAASzoB,KAAK0oB,aACb1oB,MAEHZ,EAAE8B,SAASR,GAAGsR,SAAU,eAAgBhS,KAAK0oB,YAAa1oB,OAG5D8mB,iBA9BiC,WA+B/B,IAAMhB,EAAO9lB,KAAKuB,aAElBnC,EAAEwmB,WAAW3lB,UAAU4mB,eAAe3mB,KAAKF,MAE3CZ,EAAE8B,SAASH,IAAI+kB,EAAM,CACnBtkB,UAAWxB,KAAKwoB,WAChBC,QAASzoB,KAAK0oB,aACb1oB,MAEHZ,EAAE8B,SAASH,IAAIiR,SAAU,eAAgBhS,KAAK0oB,YAAa1oB,OAI7DkmB,cA5CiC,aA+CjCI,aA/CiC,WAgD/BtmB,KAAKse,UAAUte,KAAKmmB,SAAShjB,UAAUnD,KAAKomB,WAG9CoC,WAnDiC,SAmDtBxnB,GACT,IAAMiH,EAAKjI,KAAKmmB,SAASjN,YACnBpX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAKmmB,SAAS3lB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAKmmB,SAASjc,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAKmmB,WAA/D,CAIA,IAAMwC,EAAa7mB,EAAK0Y,aAExBxa,KAAK4oB,OAASlH,WAAWtiB,EAAEwD,MAAK,WAC1B5C,KAAK6oB,UAAYC,aAAa9oB,KAAK6oB,UAElC7oB,KAAK+oB,aAGRJ,EAAW9mB,WAAU,SAASyX,GACxBtZ,OAASsZ,GAAUA,EAAO0P,kBAHhChpB,KAAKipB,YAAY,UAAW,CAACC,WAAW,IAO1ClpB,KAAKmpB,gBACJnpB,MAAO,OAGZ0oB,YA7EiC,SA6ErB1nB,GACV,IAAMiH,EAAKjI,KAAKmmB,SAASjN,YACnBpX,EAAOmG,EAAKA,EAAGzH,QAAUR,KAAKmmB,SAAS3lB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAKmmB,SAASjc,eAAiBjC,GAAOA,EAAG1F,YAAYvC,KAAKmmB,WAA/D,CAIA,IAAMwC,EAAa7mB,EAAK0Y,aAEpBxZ,EAAEooB,gBAAkBpX,UACtB2W,EAAW9mB,WAAU,SAASyX,GAC5BA,EAAO0P,kBAIPhpB,KAAK4oB,QAAUE,aAAa9oB,KAAK4oB,QAErC5oB,KAAK6oB,SAAWnH,WAAWtiB,EAAEwD,MAAK,WAChC5C,KAAKgpB,iBACJhpB,MAAO,SAIdZ,EAAEqb,WAAa,SAASjY,EAASwT,EAAKxW,GACpC,OAAO,IAAIJ,EAAEipB,WAAW7lB,EAASwT,EAAKxW,K,eCvGxCJ,EAAEiqB,aAAejqB,EAAEwmB,WAAWrmB,OAAO,CACnCC,QAAS,CACPqmB,KAAM,SACNC,KAAM1mB,EAAE0mB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZmC,WAajC,IAAM1jB,EAAUxC,KAAKmmB,SACfK,EAAehkB,EAAQW,UAAUnD,KAAKomB,SACtCK,EAAYzmB,KAAKqmB,YACjB1Z,EAAQ3M,KAAK6nB,oBAAoBrB,EAAcC,GAMrDjkB,EAAQ6K,SAASV,EAAO,QAG1B2Z,aAzBmC,WA0BjCtmB,KAAKse,UAAUte,KAAKmmB,SAAShjB,UAAUnD,KAAKomB,aAIhDhnB,EAAEib,aAAe,SAAS7X,EAASwT,EAAKxW,GACtC,OAAO,IAAIJ,EAAEiqB,aAAa7mB,EAASwT,EAAKxW,K,eC/B1CJ,EAAEkqB,YAAclqB,EAAEwmB,WAAWrmB,OAAO,CAClCC,QAAS,CACPqmB,KAAM,QACNC,KAAM1mB,EAAE0mB,KAAK,CACXC,QAEE,iiEACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZkC,WAahC,IAAM1jB,EAAUxC,KAAKmmB,SACf7lB,EAAMkC,EAAQjC,KAChBoG,EAAenE,EAAQmE,aACrB6f,EAAehkB,EAAQW,UAAUnD,KAAKomB,SACtCK,EAAYzmB,KAAKqmB,YACjBxa,EAAQ7L,KAAKmnB,wBAAwBX,EAAcC,GAOpD9f,IAAgBA,EAAe,IACpC,IAAMshB,EAAU3nB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnDglB,EAAU7nB,EAAI8C,mBAAmBZ,EAAQW,UAAU,IACnD+L,EAAI7D,KAAK+c,IAAIH,EAAQhkB,EAAIkkB,EAAQlkB,GACjCmL,EAAI/D,KAAK+c,IAAIH,EAAQ/jB,EAAIikB,EAAQjkB,GACtBmH,KAAKqc,KAAKxY,EAAIA,EAAIE,EAAIA,GAExBzI,GAAgBkF,EAAQ,EACrCrJ,EAAQoJ,QAAQC,GAMhBrJ,EAAQoJ,QAAQ,IAIpB0a,aA3CkC,WA4ChCtmB,KAAKse,UAAUte,KAAKmmB,SAAShjB,UAAUnD,KAAKomB,aAIhDhnB,EAAE6a,YAAc,SAASzX,EAASwT,EAAKxW,GACrC,OAAO,IAAIJ,EAAEkqB,YAAY9mB,EAASwT,EAAKxW,K,eCjDzCJ,EAAE0Q,iBAAmB1Q,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiBiI,iBAAmB,GAEtCvT,EAAEsL,iBAAiB6e,WAAanqB,EAAE2gB,SAASyJ,QAAQjqB,OAAO,IAE1DH,EAAE0Q,iBAAiB2F,WAAa,SAASjW,GACvC,OAAO,IAAIJ,EAAEsL,iBAAiB6e,WAAW/pB,IAI3CJ,EAAEC,sBAAsBsQ,aAAY,WAElC3P,KAAKypB,QAAU,CACbrqB,EAAE8W,aACF9W,EAAEyV,aACFzV,EAAEiV,WACFjV,EAAE8U,cAIJ9U,EAAEC,sBAAsBoT,KAAKiH,MAAQ,CACnCoB,KAAM1b,EAAEiV,WACRqV,OAAQtqB,EAAE8U,cAGZ,IAAM0Q,EAAI5kB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAKypB,QAE7DzpB,KAAKQ,QAAUpB,EAAEmH,sBAAsBzE,KAAK9B,KAAM,CAACiT,QAAS2R,Q,cC7B9DxlB,EAAEsL,iBAAmBtL,EAAEsL,kBAAoB,GAC3CtL,EAAE0Q,iBAAmB1Q,EAAEsL,iBAEvBtL,EAAEsL,iBAAiB8N,WAAa,GAEhCpZ,EAAEsL,iBAAiBC,SAAWvL,EAAE2gB,SAAS4J,MAAMpqB,OAAO,CACpDC,QAAS,CACPoqB,OAAQ,CAAC,GAAI,KAGf9pB,WALoD,SAKzC0K,EAAQhL,GACjBJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAE2gB,SAAS4J,MAAM1pB,UAAUH,WAAWI,KAAKF,KAAMwK,EAAQhL,IAG3D0Q,SAVoD,SAU3C5P,EAAKya,GACZ/a,KAAKM,IAAMA,EACXN,KAAK+a,GAAKA,GAGZ8O,MAfoD,WAgBlD,GAAI7pB,KAAKyjB,IACP,OAAOzjB,KAAKyjB,IAAIqG,UAIpBtL,UArBoD,SAqB1CuL,GAER,IADA,IAAIF,EAAQ7pB,KAAK6pB,QACR7mB,EAAI,EAAGA,EAAI6mB,EAAMhlB,OAAQ7B,IAAK,CACrC,IAAIgnB,EAAOH,EAAM9T,KAAK/S,GAAG8mB,SAAS,GAClC,GAAI1qB,EAAE6C,QAAQQ,SAASunB,EAAMD,GAE3B,OADAC,EAAKC,QACED,EAGX,OAAO,KAIX5qB,EAAE0Q,iBAAiBuO,SAAW,SAAS7T,EAAQhL,GAC7C,OAAO,IAAIJ,EAAEsL,iBAAiBC,SAASH,EAAQhL,IAGjDJ,EAAEoH,wBAAwBmJ,aAAY,WAEpC3P,KAAKypB,QAAU,CACbrqB,EAAEwgB,WACFxgB,EAAEmlB,YACFnlB,EAAEqgB,cACFrgB,EAAEglB,aACFhlB,EAAE+iB,iBACF/iB,EAAEiV,WACFjV,EAAEmd,cACFnd,EAAEud,gBACFvd,EAAEyd,aACFzd,EAAE8W,aACF9W,EAAEyV,cAIJzV,EAAEsL,iBAAiB+H,KAAKiH,MAAQ,CAC9BrY,KAAMjC,EAAEwgB,WACR/T,MAAOzM,EAAEmlB,YACT5J,QAASvb,EAAEqgB,cACX7E,OAAQxb,EAAEglB,aACVvJ,WAAYzb,EAAE+iB,iBACdrH,KAAM1b,EAAEiV,YAGV,IAAMuQ,EAAI5kB,KAAKR,QAAQyT,QAAUjT,KAAKR,QAAQyT,QAAUjT,KAAKypB,QAE7DzpB,KAAKQ,QAAUpB,EAAE0Q,iBAAiBhO,KAAK9B,KAAM,CAACiT,QAAS2R,Q,eCrEzDxlB,EAAE8qB,QAAU9qB,EAAE+qB,MAAM5qB,OAAO,CAEzB6qB,KAAM,2CAENC,SAAU,GAEVhY,OANyB,WAQvB,OADArS,KAAKsqB,WAAWtqB,KAAKqqB,UACdrqB,KAAKoqB,MAGdE,WAXyB,SAWdC,GACTvqB,KAAKoqB,MAAQG,M,eCdjBnrB,EAAEgT,iBAAmBhT,EAAE8qB,QAAQ3qB,OAAO,CAEpC8qB,SAEI,8T,eCHNjrB,EAAEqhB,eAAiBrhB,EAAE8qB,QAAQ3qB,OAAO,CAClC8qB,SACE,uqT,eCHJjrB,EAAEsQ,IAAI8a,aAAa,CACjBC,cAAc,EACdC,SAAS,IAOXtrB,EAAEsQ,IAAIib,aAAevrB,EAAEsQ,IAAIkb,QAAQrrB,OAAO,CACxCO,WADwC,SAC7BQ,GACTN,KAAKO,KAAOD,EACZN,KAAKoQ,WAAa9P,EAAI8P,WACtBpQ,KAAK6qB,MAAQvqB,EAAIwqB,OAAOC,YACxB/qB,KAAKgrB,mBAAqB,EAC1B1qB,EAAII,GAAG,SAAUV,KAAKirB,SAAUjrB,OAGlCkQ,SATwC,WAUtC9Q,EAAE8B,SAASR,GAAGV,KAAKoQ,WAAY,YAAapQ,KAAKkrB,aAAclrB,OAGjE8Q,YAbwC,WActC1R,EAAE8B,SAASH,IAAIf,KAAKoQ,WAAY,YAAapQ,KAAKkrB,aAAclrB,OAGlEmrB,MAjBwC,WAkBtC,OAAOnrB,KAAKorB,QAGdH,SArBwC,WAsBtC7rB,EAAE6C,QAAQ8O,OAAO/Q,KAAK6qB,cACf7qB,KAAK6qB,OAGdQ,YA1BwC,WA2BtCrrB,KAAKgrB,mBAAqB,EAC1BhrB,KAAKorB,QAAS,GAGhBE,yBA/BwC,WAgCN,IAA5BtrB,KAAKgrB,qBACPlC,aAAa9oB,KAAKgrB,oBAClBhrB,KAAKgrB,mBAAqB,IAI9BE,aAtCwC,SAsC3BlqB,GACX,IAAKA,EAAE8B,UAAyB,IAAZ9B,EAAEuqB,OAA4B,IAAbvqB,EAAEyQ,OACrC,OAAO,EAKTzR,KAAKsrB,2BACLtrB,KAAKqrB,cAELjsB,EAAE6C,QAAQupB,uBACVpsB,EAAE6C,QAAQwpB,mBAEVzrB,KAAK0rB,YAAc1rB,KAAKO,KAAKorB,2BAA2B3qB,GAExD5B,EAAE8B,SAASR,GAAGsR,SAAU,CACtBtQ,YAAatC,EAAE8B,SAASwd,KACxBkN,UAAW5rB,KAAK6rB,aAChBpD,QAASzoB,KAAK8rB,YACb9rB,OAGL6rB,aA5DwC,SA4D3B7qB,GACNhB,KAAKorB,SACRprB,KAAKorB,QAAS,EAEdprB,KAAK+rB,KAAO3sB,EAAE6C,QAAQgP,OAAO,MAAO,mBAAoBjR,KAAKoQ,YAC7DhR,EAAE6C,QAAQ4N,SAAS7P,KAAKoQ,WAAY,qBAEpCpQ,KAAKO,KAAKsI,KAAK,iBAGjB7I,KAAKgsB,OAAShsB,KAAKO,KAAKorB,2BAA2B3qB,GAEnDhB,KAAKisB,QAAU7sB,EAAE8sB,OAAOlsB,KAAK0rB,YAAa1rB,KAAKgsB,QAC/C,IAAIG,EAAOnsB,KAAKisB,QAAQG,UAExBhtB,EAAE6C,QAAQoqB,YAAYrsB,KAAK+rB,KAAM/rB,KAAKisB,QAAQK,KAE9CtsB,KAAK+rB,KAAK5f,MAAMpG,MAAQomB,EAAKloB,EAAI,KACjCjE,KAAK+rB,KAAK5f,MAAMnG,OAASmmB,EAAKjoB,EAAI,MAGpCqoB,QAjFwC,WAkFlCvsB,KAAKorB,SACPhsB,EAAE6C,QAAQ8O,OAAO/Q,KAAK+rB,MACtB3sB,EAAE6C,QAAQ8R,YAAY/T,KAAKoQ,WAAY,sBAGzChR,EAAE6C,QAAQuqB,sBACVptB,EAAE6C,QAAQwqB,kBAEVrtB,EAAE8B,SAASH,IAAIiR,SAAU,CACvBtQ,YAAatC,EAAE8B,SAASwd,KACxBkN,UAAW5rB,KAAK6rB,aAChBpD,QAASzoB,KAAK8rB,YACb9rB,OAGL8rB,WAjGwC,SAiG7B9qB,GACT,IAAgB,IAAZA,EAAEuqB,OAA4B,IAAbvqB,EAAEyQ,UAIvBzR,KAAKusB,UAEAvsB,KAAKorB,QAAV,CAIAprB,KAAKsrB,2BACLtrB,KAAKgrB,mBAAqBtJ,WACtBtiB,EAAE6N,KAAKrK,KAAK5C,KAAKqrB,YAAarrB,MAAO,GAEzC,IAAIksB,EAAS9sB,EAAE4K,aACXhK,KAAKO,KAAKmsB,uBAAuB1sB,KAAKisB,QAAQU,iBAC9C3sB,KAAKO,KAAKmsB,uBAAuB1sB,KAAKisB,QAAQW,gBAG9C7hB,EAAO/K,KAAKO,KAAKuJ,UACjBT,EAASrJ,KAAKO,KAAKgJ,YAGvB2iB,EAASlsB,KAAKO,KAAKmU,8BAA8BwX,EAAQnhB,EAAM1B,GAE/DrJ,KAAKO,KAAKsI,KAAK,gBAAiB,CAAC2L,iBAAkB0X,QAIvD9sB,EAAEsQ,IAAIC,YAAY,aAAc,eAAgBvQ,EAAEsQ,IAAIib,e,eCxItDvrB,EAAEsQ,IAAI8a,aAAa,CACjB5hB,mBAAmB,IAOrBxJ,EAAEsQ,IAAImd,kBAAoBztB,EAAEsQ,IAAIod,gBAAgBvtB,OAAO,CACrDkB,OADqD,WAEnD,IAAMH,EAAMN,KAAKO,KAEjB,OAAIP,KAAKyT,WAGLnT,EAAIqI,gBAAgB3G,WACtB1B,EAAIqI,gBAAgB7H,UAGtBd,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAVuBlQ,MAc9Bc,QAlBqD,WAmBnD,OAAKd,KAAKyT,UAEVzT,KAAKyT,UAAW,EAChBzT,KAAK8Q,cAEE9Q,MALsBA,MAQ/B+sB,cA3BqD,SA2BvC/rB,GACZ,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGTD,GAAMA,EAAG9Q,WAEbxC,EAAI0sB,UAAY,EAChBhtB,KAAKO,KAAK0sB,cAAgBvL,YAAW,WACd,IAAjBphB,EAAI0sB,UACN1sB,EAAI0sB,SAAW,EACf1sB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQ6lB,OAAUtZ,GAAMA,EAAGuZ,mBAAmBC,kBAClD9sB,EAAIuI,KAAK,cAGZ,OAGLwkB,eAhDqD,WAiDnD,IAAM/sB,EAAMN,KAAKO,KACX+sB,EAAShtB,EAAIitB,QAEnB7L,YAAW,WACTphB,EAAI0sB,SAAW,EACflE,aAAaxoB,EAAI2sB,iBAChB,GAEEK,IAE0B,IAA3BA,EAAO9tB,QAAQ8Y,SACjBgV,EAAO9tB,QAAQ8Y,QAAU,EACzBgV,EAAOpS,WAAW,KAElBoS,EAAO9tB,QAAQ8Y,QAAU,EACzBgV,EAAOpS,WAAW,QAKxB9b,EAAEsQ,IAAIC,YAAY,aAAc,oBAAqBvQ,EAAEsQ,IAAImd,oB,eCxE3DztB,EAAEsQ,IAAIod,gBAAgBU,QAAQ,CAC5Btd,SAD4B,WAE1BlQ,KAAKO,KAAKG,GAAG,CACXupB,MAAOjqB,KAAK+sB,cACZ5T,SAAUnZ,KAAKqtB,gBACdrtB,OAGL8Q,YAR4B,WAS1B9Q,KAAKO,KAAKQ,IAAI,CACZkpB,MAAOjqB,KAAK+sB,cACZ5T,SAAUnZ,KAAKqtB,gBACdrtB,OAGLS,OAf4B,WAgB1B,OAAIT,KAAKyT,UAGLzT,KAAKO,KAAKqI,mBACR5I,KAAKO,KAAKqI,kBAAkB5G,YAMlChC,KAAKO,KAAKsI,KAAK,iBAEf7I,KAAKyT,UAAW,EAChBzT,KAAKkQ,YAbuBlQ,MAiB9Bc,QAjC4B,WAkC1B,OAAKd,KAAKyT,UAGVzT,KAAKO,KAAKsI,KAAK,kBAEf7I,KAAKyT,UAAW,EAChBzT,KAAK8Q,cACE9Q,MAPsBA,MAU/B+sB,cA5C4B,SA4Cd/rB,GACZ,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAGTD,GAAMA,EAAG9Q,WAEbxC,EAAI0sB,UAAY,EAChBhtB,KAAKO,KAAK0sB,cAAgBvL,YAAW,WACd,IAAjBphB,EAAI0sB,UACN1sB,EAAI0sB,SAAW,EACf1sB,EAAIuI,KAAK,cAAe,CAACoB,KAAM,iBAG3B7K,EAAEiI,QAAQ6lB,OAAUtZ,GAAMA,EAAGuZ,mBAAmBC,kBAIlD9sB,EAAImtB,cAAc7Z,EAAI,WAAY,CAACtT,MAGtC,OAGL+sB,eApE4B,SAoEbrsB,GACb,IAAMV,EAAMN,KAAKO,KACXqT,EAAK5S,EAAE6S,cAOb,GALA6N,YAAW,WACTphB,EAAI0sB,SAAW,EACflE,aAAaxoB,EAAI2sB,iBAChB,IAEErZ,EAAM,OAAO,EAElB,IAAM8Z,EAAUptB,EAAIwJ,UACdxG,EAAQhD,EAAId,QAAQmuB,UACpB5iB,EAAO6I,EAAG9Q,SAAW4qB,EAAUpqB,EAAQoqB,EAAUpqB,EAEnB,WAAhChD,EAAId,QAAQmJ,gBACdrI,EAAIstB,QAAQ7iB,GAEZzK,EAAIutB,cAAc7sB,EAAE8sB,eAAgB/iB,O,eC1F1C3L,EAAEsQ,IAAI8d,QAAQ,CAEZR,SAAU,EAEVe,gBAJY,SAII1X,GAiCd,OA9BAA,EAAOrW,KAAKguB,cAAgB5uB,EAAEG,OAAO,CACnC0uB,cAAe,GACfC,QAAS,GACTC,cAAe,GACfC,QAAS,EACTd,QAAQ,EACRe,aAAc,EACdzlB,mBAAmB,GAClByN,IAEOiX,SACRttB,KAAKguB,cAAgB5uB,EAAEG,OAAOS,KAAKguB,cAAe,CAChDK,aAAchY,EAAKiX,OAAS,OAAIjY,EAChCzM,oBAAmByN,EAAKiX,aAAgBjY,KAI5CrV,KAAKsuB,cAAgBlvB,EAAEmvB,UAnBX,oDAmB0B,CACpCL,QAAS7X,EAAK6X,QACdC,cAAe9X,EAAK8X,cACpBC,QAAS/X,EAAK+X,QACd9V,QAASjC,EAAK4X,gBACbrc,MAAM5R,MAELqW,EAAKiX,OAAUttB,KAAKwuB,WAAWnY,GAGjCrW,KAAK4I,uBAAoByM,EAGpBrV,MAGTwuB,WAxCY,SAwCDnY,GAsBT,OAnB0B,IAAtBA,EAAKgY,cAA4C,IAAtBhY,EAAKgY,eAClChY,EAAKgY,aAAe,GAGtBruB,KAAKutB,QAAUnuB,EAAEmvB,UANL,8EAMoB,CAC9BE,YAAa,0OACbC,WAAY,OACZpG,aAAa,EACbhQ,QAASjC,EAAKgY,aACdH,QAAS7X,EAAK6X,QACdC,cAAe9X,EAAK8X,cACpBC,QAAS/X,EAAK+X,QACdO,IAAK,QACJ/c,MAAM5R,MAELA,KAAKguB,cAAcplB,mBACrB5I,KAAK4I,kBAAkBnI,SAGlBT,QAKXZ,EAAEsQ,IAAIC,aAAY,WAChB3P,KAAK4I,kBAAkB9H,UACvBd,KAAK2I,gBAAgBlI,a,eCtEvBrB,EAAE6C,QAAU7C,EAAEG,OAAOH,EAAE6C,QAAS,CAC9B7B,gBAD8B,SACdwuB,GACd5uB,KAAKyO,YAAcmgB,GAGrBpgB,gBAL8B,SAKd+U,GACd,IAAMtV,EAAO7O,EAAEiI,QAAQ6G,UAAY9O,EAAEiI,QAAQwnB,SAAWzvB,EAAEiI,QAAQynB,KAS5D5iB,EAAS,CACbqX,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjBA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjB,EAAG,EAAG,EAAG,EACTA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,IAGbwL,EAAM9gB,EAAO,YAAc/B,EAAOyC,KAAK,KAAO,IAAM,GAQ1D,OANKV,GACH+I,QACKC,IAAI,uFAIJ8X,GAGT7sB,YAjC8B,SAiClBgQ,EAAIL,GACd,IAAM3O,EAAI2O,EACV,OAAO7R,KAAKyC,SAASyP,EAAIhP,GACvBlD,KAAK+T,YAAY7B,EAAIhP,GAAKlD,KAAK6P,SAASqC,EAAIhP,IAGhDga,cAvC8B,WAwC5B,OAAO7D,OAAO2V,QAAQhvB,KAAKyO,YAAYwgB,qBAGzCja,eA3C8B,SA2CfD,GACb,GAAU,IAANA,EAAW,OAAO/U,KAAKkd,gBAE3B,IACIgS,EADEzgB,EAAczO,KAAKyO,YAAY0gB,qBASrC,OALED,EADyB,mBAAhBzgB,EACIA,EAAYsG,GAEZtG,EAGR4K,OAAO2V,QAAQE,O,cCvD1B9vB,EAAEkS,SAAW,CAMXL,OANW,SAMJme,GAKL,MAJI,KAAKC,KAAKD,KACZA,EAAMA,EAAIE,QAAQ,KAAM,KAIxB,4BAA8BF,EAA9B,mDACuBA,EADvB,kBAMJlN,cAlBW,SAkBGlR,EAAWue,GACvB,IAAMtQ,EAAMjO,EAAUiB,cAAc,OAEhCgN,GACF7f,EAAE6C,QAAQ4N,SAASoP,EAAKsQ,IAK5BnQ,YA3BW,SA2BCpO,EAAWwe,EAAMC,GACtB,KAAKJ,KAAKG,KACbA,EAAO,IAAMA,GAEV,KAAKH,KAAKI,KACbA,EAAO,IAAMA,GAGf,IAAM7Q,EAAM5N,EAAUiB,cAAc,OACpC,GAAI2M,EAAK,CACP,IAAM8Q,EAAU9Q,EAAI+Q,aAAa,gBAAkBH,EAAOC,EAAOD,EAEjE,OADA5Q,EAAI1N,aAAa,aAAcwe,GACxBA,EAET,OAAO,GAGT5d,YA5CW,SA4CCd,EAAW4e,EAAQC,GAC7B,IAAMH,EAAU1e,EAAU2e,aAAa,WAAaC,EAASC,EAASD,EAMtE,OAJA5e,EAAUE,aAAa,QAASwe,GAC5B1e,EAAU8e,aAAa,eACzB9e,EAAUE,aAAa,aAAcwe,GAEhCA,K,eCnDXtwB,EAAE+G,UAAY,CAEZC,cAFY,SAEE5D,GACZ,IAAIlC,EAAMkC,EAAQjC,KAMlB,OAAe,IAJJD,EACN8C,mBAAmBZ,EAAQW,UAAU,IACrC4sB,WAAWzvB,EAAI8C,mBAAmBZ,EAAQW,UAAU,KAEnCX,EAAQjB,aAAawE,S,eCT/C3G,EAAEmQ,WAAa,CAGbygB,IAHa,SAGTzM,GACF,MAAO,CACLA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAK/D0M,OAZa,SAYNrL,EAAGzF,GACR,IACInc,EADEE,EAAI,GAGV,IAAKF,EAAI,EAAGA,EAAI,EAAGA,IACjB,IAAK,IAAIiM,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAG1B,IAFA,IAAIihB,EAAM,EAEDzkB,EAAI,EAAGA,EAAI,EAAGA,IACrBykB,GAAOtL,EAAE,EAAE5hB,EAAIyI,GAAG0T,EAAE,EAAE1T,EAAIwD,GAG5B/L,EAAE,EAAEF,EAAIiM,GAAKihB,EAIjB,OAAOhtB,GAITitB,OAhCa,SAgCN5M,EAAG6M,GACR,MAAO,CACL7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAC/B7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAC/B7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,KAKnCC,OAzCa,SAyCN5L,EAAGlB,GAGR,IAFA,IAAMrX,EAAS,GAENlJ,EAAI,EAAG2f,EAAIY,EAAE1e,OAAQ7B,EAAI2f,EAAG3f,IACnCkJ,EAAOtG,KAAK6e,EAAElB,EAAEvgB,IAGlB,OAAOkJ,GAGTokB,cAnDa,SAmDCC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACxC,IAAMvN,EAAI,CACRgN,EAAIE,EAAIE,EACRH,EAAIE,EAAIE,EACR,EAAG,EAAG,GAEFR,EAAIhxB,EAAEmQ,WAAW4gB,OAAO/wB,EAAEmQ,WAAWygB,IAAIzM,GAAI,CAACsN,EAAIC,EAAI,IAE5D,OAAO1xB,EAAEmQ,WAAW0gB,OAAO1M,EAAG,CAC5B6M,EAAE,GAAI,EAAG,EACT,EAAGA,EAAE,GAAI,EACT,EAAG,EAAGA,EAAE,MAIZ9mB,QAlEa,SAkELia,EAAGtf,EAAGC,GACZ,IAAMksB,EAAIhxB,EAAEmQ,WAAW4gB,OAAO5M,EAAG,CAACtf,EAAGC,EAAG,IAExC,MAAO,CAACksB,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,KAG5B5gB,oBAxEa,SAyETuhB,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,GAEjB,IAAMrN,EAAIrlB,EAAEmQ,WAAW+gB,cAAcS,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClEjS,EAAIvgB,EAAEmQ,WAAW+gB,cAAcW,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClEvO,EAAInkB,EAAEmQ,WAAW0gB,OAAOtQ,EAAGvgB,EAAEmQ,WAAWygB,IAAIvL,IAKlD,OAAOrlB,EAAEmQ,WAAW8gB,OAAO,EAAE9M,EAAE,GAAIA,M,eCrFvCnkB,EAAEwN,SAAW,CAEXC,UAFW,SAED5I,EAAGC,GAAiB,IAAd+H,EAAc,uDAAP,MACrB,MAAgB,QAATA,EACHjM,KAAKgN,iBAAiB3B,KAAK0c,MAAM7jB,EAAGD,IACpCoH,KAAK0c,MAAM7jB,EAAGD,IAGpB+I,iBARW,SAQML,GACf,OAAgB,IAARA,EAAetB,KAAKyB,IAG9BS,iBAZW,SAYMZ,GACf,OAAQA,EAAQtB,KAAKyB,GAAM,O,eCb/B1N,EAAEe,MAAQ,CACRC,gBADQ,WAEN,IAAMqO,EAAc,CAClB6Q,YAAa,eACbE,aAAc,gBACdE,aAAc,gBACdG,UAAW,aACXmB,YAAa,eACbC,aAAc,gBACdnC,aAAc,gBACdC,UAAW,aACXqD,gBAAiB,oBACjBG,eAAgB,kBAChBK,SAAU,YACVC,WAAY,cACZmB,gBAAiB,oBACjBC,qBAAsB,yBACtBE,aAAc,wBACdE,YAAa,eACbG,WAAY,cACZE,aAAc,iBACdC,YAAa,gBACbE,aAAc,gBACdoK,mBACE,qEACFE,qBACE,wEAGJ,GAAKnvB,KAAKR,QAAQiP,YAIhB,IAAK,IAAMkF,KAAOlF,EACXzO,KAAKR,QAAQiP,YAAYkP,eAAehK,KAC3C3T,KAAKR,QAAQiP,YAAYkF,GAAOlF,EAAYkF,SALhD3T,KAAKR,QAAQiP,YAAcA,EAU7BrP,EAAE6C,QAAQ7B,gBAAgBJ,KAAKR,QAAQiP,cAGzC0E,aA3CQ,SA2CKyb,EAAKjb,EAAKoe,GAErB,MADY,CAACpe,EAAKoe,GACPttB,QAAO,SAASmqB,EAAKnjB,GAC9B,OAAOmjB,GAAOA,EAAInjB,KACjBmjB,OC7CPoD,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,O","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":["L.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: this.getLayerId(layer),\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
    ' +\n /* eslint-disable */\n '' +\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\n this.toolbar = L.distortableImage.controlBar({\n actions: this.editActions,\n position: 'topleft',\n }).addTo(map, group);\n },\n\n _removeToolbar() {\n const map = this._group._map;\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n } else {\n return false;\n }\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n }\n return this;\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (this.editActions[idx] === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n return true;\n } else {\n return false;\n }\n });\n return this;\n },\n\n startExport() {\n if (!this.hasTool(L.ExportAction)) { return; }\n\n return new Promise((resolve) => {\n const opts = this._exportOpts;\n opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion\n\n let statusUrl;\n this.updateInterval = null;\n\n // this may be overridden to update the UI to show export progress or completion\n const _defaultUpdater = (data) => {\n data = JSON.parse(data);\n // optimization: fetch status directly from google storage:\n if (data.status_url) {\n if (statusUrl !== data.status_url && data.status_url.match('.json')) {\n // if (data.status_url && data.status_url.substr(0,1) === \"/\") {\n // opts.statusUrl = opts.statusUrl + data.status_url;\n // } else {\n statusUrl = data.status_url;\n // }\n }\n\n if (data.status === 'complete') {\n clearInterval(this.updateInterval);\n\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n resolve();\n if (data.jpg !== null) {\n alert('Export succeeded. ' + opts.exportUrl + data.jpg);\n }\n }\n\n // TODO: update to clearInterval when status == \"failed\" if we update that in this file:\n // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb\n console.log(data);\n }\n };\n\n // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json;\n // this may be overridden to integrate with any UI\n const _defaultHandleStatusRes = (data) => {\n statusUrl = opts.statusUrl + data;\n // repeatedly fetch the status.json\n this.updateInterval = setInterval(() => {\n const reqOpts = {method: 'GET'};\n const req = new Request(`${statusUrl}?${Date.now()}`, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(opts.updater);\n }, opts.frequency);\n };\n\n // initiate the export\n const _defaultFetchStatusUrl = (mergedOpts) => {\n const form = new FormData();\n form.append('collection', JSON.stringify(mergedOpts.collection));\n form.append('scale', mergedOpts.scale);\n form.append('upload', true);\n\n const reqOpts = {method: 'POST', body: form};\n const req = new Request(mergedOpts.exportStartUrl, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(mergedOpts.handleStatusRes);\n };\n\n // If the user has passed collection property\n this.customCollection = !!opts.collection;\n if (!this.customCollection) {\n opts.collection = this._group.generateExportJson().images;\n }\n\n opts.frequency = opts.frequency || 3000;\n opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel !\n opts.updater = opts.updater || _defaultUpdater;\n opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes;\n opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl;\n\n opts.fetchStatusUrl(opts);\n });\n },\n});\n\nL.distortableCollection.edit = (group, options) => {\n return new L.DistortableCollection.Edit(group, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// holds the keybindings & toolbar API for an individual image instance\nL.DistortableImage.Edit = L.Handler.extend({\n options: {\n opacity: 0.5,\n outline: '1px solid red',\n keymap: L.distortableImage.action_map,\n },\n\n initialize(overlay, options) {\n this._overlay = overlay;\n this._toggledImage = false;\n this._mode = overlay.options.mode;\n this._transparent = false;\n this._outlined = false;\n this._opacity = options.opacity;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n this._opacity = o;\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this._opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, this._opacity);\n image.setAttribute('opacity', this._opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\n// Add custom CSS scripts and overwrites\nconst subtoolbarCss = new CSSStyleSheet();\nsubtoolbarCss.replaceSync(\n `.leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n `\n);\n\nsubtoolbarCss.insertRule(\n `.leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }`\n);\ndocument.adoptedStyleSheets = [subtoolbarCss];\n\nopacities = opacities.map((o) => {\n (isNaN(o) || o > 100) ? o = 100 : o;\n (o < 0) ? o = 0 : o;\n\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: o,\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nL.OpacitiesToolbar2 = L.Toolbar2.extend({\n options: {\n className: '',\n filter: function() { return true; },\n actions: [],\n style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`,\n },\n\n appendToContainer(container) {\n let baseClass = this.constructor.baseClass + '-' + this._calculateDepth();\n let className = baseClass + ' ' + this.options.className;\n let Action; let action;\n let i; let j; let l; let m;\n\n this._container = container;\n this._ul = L.DomUtil.create('ul', className, container);\n this._ul.style.transform = ( this.options.style ) ? this.options.style : '';\n\n // Ensure that clicks, drags, etc. don't bubble up to the map.\n // These are the map events that the L.Draw.Polyline handler listens for.\n // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but\n // if only 'mouseup' is silenced, then the map gets stuck in a halfway\n // state because it receives a 'mousedown' event and is waiting for the\n // corresponding 'mouseup' event.\n this._disabledEvents = [\n 'click', 'mousemove', 'dblclick',\n 'mousedown', 'mouseup', 'touchstart',\n ];\n\n for (j = 0, m = this._disabledEvents.length; j < m; j++) {\n L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation);\n }\n\n /* Instantiate each toolbar action and add its corresponding toolbar icon. */\n for (i = 0, l = this.options.actions.length; i < l; i++) {\n Action = this._getActionConstructor(this.options.actions[i]);\n\n action = new Action();\n action._createIcon(this, this._ul, this._arguments);\n }\n },\n});\n\n\nL.OpacitiesAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'opacities',\n tooltip: 'Set custom opacity',\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n options.subToolbar = new L.OpacitiesToolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 var map = overlay._map;\n\n var 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 var 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":["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","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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","push","id","getLayerId","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","splice","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","indexOf","_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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n // re-order layers by _leaflet_id to match their display order in UI\n // add new layer to right position and avoid repitition\n const newArr = arr.every((each) => {\n return each._leaflet_id !== layer._leaflet_id;\n });\n if (newArr) {\n arr.push(layer);\n } else {\n arr.splice(arr.indexOf(layer), 1);\n }\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: layer._leaflet_id,\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
    ' +\n /* eslint-disable */\n '' +\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\n this.toolbar = L.distortableImage.controlBar({\n actions: this.editActions,\n position: 'topleft',\n }).addTo(map, group);\n },\n\n _removeToolbar() {\n const map = this._group._map;\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n } else {\n return false;\n }\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n }\n return this;\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (this.editActions[idx] === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n return true;\n } else {\n return false;\n }\n });\n return this;\n },\n\n startExport() {\n if (!this.hasTool(L.ExportAction)) { return; }\n\n return new Promise((resolve) => {\n const opts = this._exportOpts;\n opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion\n\n let statusUrl;\n this.updateInterval = null;\n\n // this may be overridden to update the UI to show export progress or completion\n const _defaultUpdater = (data) => {\n data = JSON.parse(data);\n // optimization: fetch status directly from google storage:\n if (data.status_url) {\n if (statusUrl !== data.status_url && data.status_url.match('.json')) {\n // if (data.status_url && data.status_url.substr(0,1) === \"/\") {\n // opts.statusUrl = opts.statusUrl + data.status_url;\n // } else {\n statusUrl = data.status_url;\n // }\n }\n\n if (data.status === 'complete') {\n clearInterval(this.updateInterval);\n\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n resolve();\n if (data.jpg !== null) {\n alert('Export succeeded. ' + opts.exportUrl + data.jpg);\n }\n }\n\n // TODO: update to clearInterval when status == \"failed\" if we update that in this file:\n // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb\n console.log(data);\n }\n };\n\n // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json;\n // this may be overridden to integrate with any UI\n const _defaultHandleStatusRes = (data) => {\n statusUrl = opts.statusUrl + data;\n // repeatedly fetch the status.json\n this.updateInterval = setInterval(() => {\n const reqOpts = {method: 'GET'};\n const req = new Request(`${statusUrl}?${Date.now()}`, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(opts.updater);\n }, opts.frequency);\n };\n\n // initiate the export\n const _defaultFetchStatusUrl = (mergedOpts) => {\n const form = new FormData();\n form.append('collection', JSON.stringify(mergedOpts.collection));\n form.append('scale', mergedOpts.scale);\n form.append('upload', true);\n\n const reqOpts = {method: 'POST', body: form};\n const req = new Request(mergedOpts.exportStartUrl, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(mergedOpts.handleStatusRes);\n };\n\n // If the user has passed collection property\n this.customCollection = !!opts.collection;\n if (!this.customCollection) {\n opts.collection = this._group.generateExportJson().images;\n }\n\n opts.frequency = opts.frequency || 3000;\n opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel !\n opts.updater = opts.updater || _defaultUpdater;\n opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes;\n opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl;\n\n opts.fetchStatusUrl(opts);\n });\n },\n});\n\nL.distortableCollection.edit = (group, options) => {\n return new L.DistortableCollection.Edit(group, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// holds the keybindings & toolbar API for an individual image instance\nL.DistortableImage.Edit = L.Handler.extend({\n options: {\n opacity: 0.5,\n outline: '1px solid red',\n keymap: L.distortableImage.action_map,\n },\n\n initialize(overlay, options) {\n this._overlay = overlay;\n this._toggledImage = false;\n this._mode = overlay.options.mode;\n this._transparent = false;\n this._outlined = false;\n this._opacity = options.opacity;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n this._opacity = o;\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this._opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, this._opacity);\n image.setAttribute('opacity', this._opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\n// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers.\nconst subtoolbarCss = new CSSStyleSheet();\nsubtoolbarCss.replaceSync(\n `.leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n `\n);\n\nsubtoolbarCss.insertRule(\n `.leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }`\n);\ndocument.adoptedStyleSheets = [subtoolbarCss];\n\nopacities = opacities.map((o) => {\n (isNaN(o) || o > 100) ? o = 100 : o;\n (o < 0) ? o = 0 : o;\n\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: o,\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nL.OpacitiesToolbar2 = L.Toolbar2.extend({\n options: {\n className: '',\n filter: function() { return true; },\n actions: [],\n style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`,\n },\n\n appendToContainer(container) {\n let baseClass = this.constructor.baseClass + '-' + this._calculateDepth();\n let className = baseClass + ' ' + this.options.className;\n let Action; let action;\n let i; let j; let l; let m;\n\n this._container = container;\n this._ul = L.DomUtil.create('ul', className, container);\n this._ul.style.transform = ( this.options.style ) ? this.options.style : '';\n\n // Ensure that clicks, drags, etc. don't bubble up to the map.\n // These are the map events that the L.Draw.Polyline handler listens for.\n // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but\n // if only 'mouseup' is silenced, then the map gets stuck in a halfway\n // state because it receives a 'mousedown' event and is waiting for the\n // corresponding 'mouseup' event.\n this._disabledEvents = [\n 'click', 'mousemove', 'dblclick',\n 'mousedown', 'mouseup', 'touchstart',\n ];\n\n for (j = 0, m = this._disabledEvents.length; j < m; j++) {\n L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation);\n }\n\n /* Instantiate each toolbar action and add its corresponding toolbar icon. */\n for (i = 0, l = this.options.actions.length; i < l; i++) {\n Action = this._getActionConstructor(this.options.actions[i]);\n\n action = new Action();\n action._createIcon(this, this._ul, this._arguments);\n }\n },\n});\n\n\nL.OpacitiesAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'opacities',\n tooltip: 'Set custom opacity',\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n options.subToolbar = new L.OpacitiesToolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\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 let 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 let zoom = this._map.getZoom();\n let 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 var map = overlay._map;\n\n var 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 var 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","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","id","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_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","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","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","data","JSON","parse","status_url","match","status","jpg","alert","console","log","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","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","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 From f4714b58f97fbb83b9a8d2b75abf24c91fd07f7e Mon Sep 17 00:00:00 2001 From: themacboy Date: Tue, 17 Jan 2023 08:07:29 +0100 Subject: [PATCH 72/73] rebuild --- dist/leaflet.distortableimage.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 747143766..8f3ddb2d6 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,6 +1,3 @@ -<<<<<<< HEAD -!function(){var t={808:function(){var t=[];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(e,i){e.shiftKey&&i.editing.enabled()&&(L.DomUtil.toggleClass(e.target,"collected"),t.every((function(t){return t._leaflet_id!==i._leaflet_id}))?t.push(i):t.splice(t.indexOf(i),1)),this.anyCollected()?i.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},generateExportJson:function(){var t={images:[]};return this.eachLayer((function(e){if(this.isCollected(e)){var i=e._image.src.split("/"),o=i[i.length-1],n=e.getCorners(),a=[{lat:n[0].lat,lon:n[0].lng},{lat:n[1].lat,lon:n[1].lng},{lat:n[3].lat,lon:n[3].lng},{lat:n[2].lat,lon:n[2].lng}];t.images.push({id:e._leaflet_id,src:e._image.src,width:e._image.width,height:e._image.height,image_file_name:o,nodes:a,cm_per_pixel:L.ImageUtil.getCmPerPixel(e)})}}),this),t.images=t.images.reverse(),t.avg_cm_per_pixel=this._getAvgCmPerPixel(t.images),t}}),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},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={}},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")},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)},_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),s=t.project(t.getCenter()),r=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(s.subtract(r)),t.unproject(s.add(L.point(r.x,-r.y))),t.unproject(s.add(L.point(-r.x,r.y))),t.unproject(s.add(r))],this._initialDimensions={center:s,offset:r,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},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 s in t)this._corners[n]=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},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var s=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,s,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var r in t)this._corners[n]=e.layerPointToLatLng(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},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],s=i*a-o*n,r=L.TrigUtil.calcAngle(i,o,"rad");return s<0&&(r+=r<0?Math.PI:-Math.PI),r<0&&(r=2*Math.PI+r),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(r)):L.Util.formatNum(r,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,s=a.project(this.getCenter()),r={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(s),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),r[e]=a.unproject(o.add(s));return this.setCorners(r),this},dragBy:function(t,e){var i,o,n=this._map,a={},s=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(s),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),s=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[s,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)),s=L.DomUtil.getMatrixString(n),r=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[r,s].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(),s=o.getCenter(),r=L.latLngBounds(t.getCorner(2),t.getCorner(1));r=o._latLngBoundsToNewLayerBounds(r,a,s),i.intersects(r)&&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)),s={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),s[o]=i.layerPointToLatLng(t.add(a));e.setCorners(s),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,e=this._overlay.getElement();this.hasTool(L.OpacityAction)&&(this._transparent=!this._transparent,t=this._transparent?this.options.opacity:1,L.DomUtil.setOpacity(e,t),e.setAttribute("opacity",t),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,e=this._overlay.getElement();this.hasTool(L.BorderAction)&&(this._outlined=!this._outlined,t=this._outlined?this.options.outline:"none",e.style.outline=t,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)),s=e.latLngToLayerPoint(t.getCorner(1)),r=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,s.x,s.y,l.x,l.y,r.x,r.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 s=t.getCenter();s.lat=n,this.toolbar=L.distortableImage.popupBar(s,{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,s=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"===s?"disabled":""},L.DistortableImage.action_map.b="lock"===s?"":"_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,s=this._overlay.editing,r=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),r&&this._link.setAttribute("style",r),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===s._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;is||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 s=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(s.x-r.x),c=Math.abs(s.y-r.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,s=0;s<3;s++)a+=t[3*i+s]*e[3*s+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() { // webpackBootstrap /******/ var __webpack_modules__ = ({ @@ -8304,5 +8301,4 @@ module.exports.formatError = function (err) { /******/ /******/ })() ; ->>>>>>> c4148e4a09526e7705188ff5b34d9d73e1220616 //# sourceMappingURL=leaflet.distortableimage.js.map \ No newline at end of file From ffeb8ef97c25edb36c0827e5659a424975af6f5f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Mar 2023 10:08:37 +0000 Subject: [PATCH 73/73] Bump @babel/core from 7.20.5 to 7.21.3 Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.20.5 to 7.21.3. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.21.3/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 326 +++++++++++++++++++++++++--------------------- 1 file changed, 180 insertions(+), 146 deletions(-) diff --git a/package-lock.json b/package-lock.json index 34fed08ac..658693384 100644 --- a/package-lock.json +++ b/package-lock.json @@ -86,34 +86,34 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz", + "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==", "dev": true, "dependencies": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/generator": "^7.21.3", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.3", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.3", + "@babel/types": "^7.21.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "engines": { @@ -134,13 +134,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", + "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", "dev": true, "dependencies": { - "@babel/types": "^7.20.5", + "@babel/types": "^7.21.3", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -187,14 +188,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.20.0", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -298,13 +300,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -347,9 +349,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", @@ -357,9 +359,9 @@ "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" }, "engines": { "node": ">=6.9.0" @@ -499,14 +501,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -527,9 +529,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", + "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1644,33 +1646,33 @@ } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", + "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", + "@babel/generator": "^7.21.3", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/parser": "^7.21.3", + "@babel/types": "^7.21.3", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1679,9 +1681,9 @@ } }, "node_modules/@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", + "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", @@ -1853,9 +1855,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, "engines": { "node": ">=6.0.0" @@ -1895,19 +1897,19 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/@leichtgewicht/ip-codec": { @@ -8638,9 +8640,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -9504,6 +9506,15 @@ "get-func-name": "^2.0.0" } }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -14598,6 +14609,12 @@ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "node_modules/yargs": { "version": "12.0.5", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", @@ -14788,31 +14805,31 @@ } }, "@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", "dev": true }, "@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz", + "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==", "dev": true, "requires": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/generator": "^7.21.3", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.3", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.3", + "@babel/types": "^7.21.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "dependencies": { @@ -14825,13 +14842,14 @@ } }, "@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", + "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", "dev": true, "requires": { - "@babel/types": "^7.20.5", + "@babel/types": "^7.21.3", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "dependencies": { @@ -14868,14 +14886,15 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.20.0", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "dependencies": { @@ -14950,13 +14969,13 @@ } }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" } }, "@babel/helper-hoist-variables": { @@ -14987,9 +15006,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", @@ -14997,9 +15016,9 @@ "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" } }, "@babel/helper-optimise-call-expression": { @@ -15100,14 +15119,14 @@ } }, "@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dev": true, "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" } }, "@babel/highlight": { @@ -15122,9 +15141,9 @@ } }, "@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", + "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -15869,38 +15888,38 @@ } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", + "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", + "@babel/generator": "^7.21.3", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/parser": "^7.21.3", + "@babel/types": "^7.21.3", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", + "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.19.4", @@ -16024,9 +16043,9 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true }, "@jridgewell/set-array": { @@ -16059,19 +16078,19 @@ } }, "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "@leichtgewicht/ip-codec": { @@ -21371,9 +21390,9 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "jsonfile": { @@ -22086,6 +22105,15 @@ "get-func-name": "^2.0.0" } }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, "make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -26017,6 +26045,12 @@ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "yargs": { "version": "12.0.5", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",